У меня есть окно поиска, которое отображается на каждой странице. Код JSP для окна поиска вставляется на каждую страницу через плитки.Как использовать несколько форм/действий в одном представлении в Struts 2
Окно поиска имеет форму и класс действий SearchAction
, которым необходимо предварительно загрузить некоторые свойства для выпадающих ящиков. Класс SearchAction
имеет метод input()
, который выполняет эту инициализацию.
Некоторые страницы также имеют свою собственную форму в основной области. Также с их собственным классом действий. Они также имеют метод input()
, который выполняет некоторую предварительную загрузку.
- Возможно ли использовать два действия в одном и том же виде?
- Как каждая форма может иметь доступ к своим свойствам своих действий.
- И как мне удастся вызвать метод ввода обоих классов действий до отображения JSP?
Update:
Я добавляю обрезанную вниз пример, так как это, вероятно, не ясно, что я пытаюсь сделать. Это страница регистрации register.jsp
с номером RegisterAction
. И страница также содержит форму поиска. (BTW: Я ушел из геттер/сеттер и другие вещи в классах действий, чтобы держать его коротким):
register.jsp:
<s:form action="executeSearch">
<s:textfield key="name" label="Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
<s:form action="executeRegister">
<s:textfield key="firstName" label="First Name"/>
<s:textfield key="lastName" label="Last Name"/>
<s:textfield key="age" label="Age"/>
<s:submit/>
</s:form>
struts.xml:
<action name="*Search" class="action.SearchAction" method="{1}">
<result name="success">/searchresult.jsp</result>
</action>
<action name="*Register" class="action.RegisterAction" method="{1}">
<result name="input">/register.jsp</result>
<result name="success">/registerOk.jsp</result>
</action>
SearchAction.java:
public class SearchAction extends ActionSupport {
private String name;
private int age;
@Override
public String input() throws Exception {
// preload the search form with some demo data
name = "test";
age = 20;
return INPUT;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
...
}
RegisterAction.java:
public class RegisterAction extends ActionSupport {
private String firstName;
private String lastName;
private int age;
@Override
public String input() throws Exception {
// preload the register form with some demo data
firstName = "John";
lastName = "Rambo";
age = 10;
return INPUT;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
...
}
Допустим, я называю действие inputRegister.action
. Затем вызывается RegisterAction.input()
. Свойства заданы. И результат SUCCESS
вызывает визуализацию register.jsp.
Но как насчет моей формы поиска. Как получить доступ к действию поиска и его модели. Разумеется, ни один из них не находится на ValueStack
. И я также не вижу способ вызвать любые методы SearchAction
, чтобы инициализировать его. Я намеренно выбираю age
, чтобы быть в обоих классах действий. На отображаемой странице вы можете видеть, что форма поиска также обращается к RegisterAction
-properties (потому что это находится поверх ValueStack). Но ему нужно получить доступ к SearchAction
. Он должен показать 20, а не 10.
Я явно делают это неправильно. Но даже после большого количества поисковых запросов я все еще не нашел правильного пути для этого.
Не используйте 'input' для предварительной загрузки значений. Вы можете использовать 'готовый', если вам нужно. У вас может быть одно действие для перехода на страницу формы и другие для отправки из форм. –