Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Как передать параметры от страницы action-классу?


Автор: Ares4322 23.3.2010, 17:31
Доброго времени суток!
Использую struts2. Есть jsp-страничка. На ней на форме формируется список. Как сделать так, чтобы action-класс этой формы мог получить выбранный в списке элемент?

Автор: MaxPayneC 23.3.2010, 18:28
Код

<select name="someField">
<option value="1">odin</option>
<option value="2">dva</option>
<option value="3" selected="selected">tri</option>
</select>


Код

private Integer someField;

public Integer getSomeField()
{
return this.someField;
}

public void setSomeField(Integer someField)
{
this.someField = someField;
}

@Override
public String execute() throws Exception
{
//тут можно юзать переменную this.someField
}

А если из селекта нужно получить не интежер, а что-то похитрее, надо писать конвертер.

Автор: Ares4322 23.3.2010, 19:55
То есть когда я выберу в селекте элемент и нажму submit на форме, то в action-классе формы я смогу достать выбранное значение таким образом?

Автор: MaxPayneC 23.3.2010, 20:35
Если ключами <option> были целые числа, да.

Автор: Ares4322 24.3.2010, 09:01
Есть две страницы, на одной форма со списком, на второй форма с полями. Как сделать так, чтобы при выборе элемента списка и переходе ко второй странице(по нажатию на submit или при переходе по ссылке - я не знаю, как лучше) на полях второй формы появлялись данные, взятые из базы по ключу, которым является выбранный элемент списка?

Автор: MaxPayneC 24.3.2010, 09:50
В экшне для второй формы загрузить из базы данные по ключу, и для полей (в примере ниже - строк) написать геттеры, соответствующие спецификации JavaBeans.
Код

public class SomeActionClass extends ActionSupport //если я перепутал класс, который должны расширять стратсовые экшны - сорри
{
private String someField;

public String getSomeField()
{
return this.someField;
}

public void setSomeField(String someField)
{
this.someField = someField;
}

@Override
public String execute()
{
//тут код, который читает что-то из базы в переменную someField
}
}

Далее, в jsp пишем либо
Код

<%@ page contentType="text/html;charset=UTF-8" language="java"
%><%@ taglib prefix="s" uri="/struts-tags"
%>someField: <s:property value="someField" />

либо
Код

<%@ page contentType="text/html;charset=UTF-8" language="java"
%>someField: <% out.print(request.getAttribute("someField")); %>

Автор: Ares4322 24.3.2010, 11:16
А у меня поля на форме - <s:textfield></s:textfield> . Как на них положить? Так же?
И проблема еще в том, как передать выбранный элемент списка другому action-классу. По идее, надо через Value Stack, но я не очень понимаю, как он работает. Можно через объект сессии, но это неправильно с точки зрения логики приложения

Автор: MaxPayneC 24.3.2010, 11:25
Код

<s:textfield name="textfieldName" />

В случае если имя переменной в экшне, который создает форму, отличается от имени переменной в экшне, который принимает форму, то
Код

<s:textfield name="textfieldName" value="%{valueFromPreviousAction}" />

Автор: Ares4322 24.3.2010, 15:57
А можно сделать валидацию для селекта? Чтоб, если не выбран элемент из селекта, то это ошибка

Автор: MaxPayneC 24.3.2010, 16:09
Можно. Я бы советовал вам обратиться к документации стратс..

Автор: Ares4322 24.3.2010, 16:21
К сожалению там не все написано. Вот и приходится на форум обращаться)

Автор: Ares4322 25.3.2010, 09:24
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)