Обычно вам не нужен публичный метод input(). Самый простой и типичный сценарий действия:
- Действие предназначено для того, чтобы «что-то сделать» (одну вещь), и для этого действия требуется некоторый ввод пользователя.
- Действие делает что-то в методе execute()
- Если действие успешно что-то сделало, оно возвращает SUCCESS. Это вызывает информативную страницу JSP.
- Если действие не получило пользовательский ввод (потому что его не было, или потому что он был недостаточным или неправильным), он возвращает INPUT. Это запускает JSP «формы ввода», чтобы пользователь мог заполнить данные и (повторно) попробовать действие.
Теперь этот базовый сценарий можно закодировать несколькими способами, среди которых:
1) Два разных сопоставления, одно для формы ввода, другое для выполнения
<!-- default action class: execute does nothing, returns SUCCES -->
<action name="ActionXXXShowForm">
<result>/myApp/XXXForm.jsp</result>
</action>
<action name="ActionXXX" class="myApp.XXXAction">
<result name="input">/myApp/XXXForm.jsp</result>
<result>/myApp/XXXDone.jsp</result>
</action>
2) Только одно сопоставление
<action name="ActionXXX" class="myApp.XXXAction">
<result name="input">/myApp/XXXForm.jsp</result>
<result>/myApp/XXXDone.jsp</result>
</action>
Оба очень похожи (особенно если вы выполняете программную проверку). В обоих случаях у нас есть только метод "struts" в действии (выполнить), что является хорошей практикой, поскольку наше действие "делает только одно". Но во втором случае нам нужно иметь дело со случаем, когда данные не публикуются, и не выводить сообщение об ошибке для этого случая.
Пример: В случае 1:
public class XXXAction extends ActionSupport {
...
public String execute() throws Exception {
if(! inputOk()) return INPUT;
// .. do your stuff
return SUCCESS;
}
private boolean inputOk() {
// ... check your inputs - sort of programatic validation
if( surname == null ) addActionError("no surname");
// .... more checks
return ! hasActionErrors());
}
}
В случае 2 вы немного измените его:
public class XXXAction extends ActionSupport {
....
public String execute() throws Exception {
if( emptyInput() ) return INPUT; // no error messages in this case
if(! inputOk()) return INPUT;
// .. do your stuff
return SUCCESS;
}
private boolean inputOk() {
// same as before
}
private boolean emptyInput() {
// detect no input was sent. do not emit errors herer
}
}
person
leonbloy
schedule
30.03.2010