2010-07-13 3 views
1

Время для еще одного глупого вопроса, добавив к длинной строке из них.Struts 2 Методы действия

Я новичок в Struts 2, потратив годы на старые 1.X. Действия Struts 2 могут быть примерно эквивалентны Struts 1 DispatchActions, просто добавив методы (и определяя их в struts.xml).

Итак, предположим, что у меня есть этот метод:

public String create() throws Exception { 
    // insert create logic here 
} 

То, что я хочу, чтобы создать() делать двойную работу. Если create() вызывается без передачи каких-либо параметров, он возвращает INPUT (и отображает страницу формы JSP), иначе он обрабатывает данные формы и возвращает SUCCESS (и отображает страницу по умолчанию).

Единственный способ, которым я располагаю, это проверить и посмотреть, есть ли какие-либо значения в запросе, что мне кажется глупым. Если бы я мог сказать: «Если я вызываю это через HTTP GET, покажу форму, если я вызываю это через HTTP POST, обработайте затем перенаправление на значение по умолчанию».

Как я уже сказал, я, вероятно, здесь довольно глупый, но любая помощь будет оценена по достоинству.

ответ

1

Что вы ищете, это использовать одно и то же действие, чтобы показать форму, а затем (после отправки) обработать форму.

public class MyAction { 
    @SkipValidation 
    public String execute() throws Exception { 
     return INPUT; // shows the form 
    } 

    public void validate() { 
     // do your validations here... 
    } 

    public String submit() throws Exception { 
     // process the form 
     // redirect somewhere 
    } 
} 

Если действие отображается как «MyAction», то ваша форма должна подчиняться «MyAction! Представить» (это динамический метод Призвание, который вызывает ваш метод submit()).

Вам необходимо создать настраиваемый перехватчик, если вы хотите, чтобы методы execute и submit вызывались только методами HTTP GET и POST (соответственно).

Смежные вопросы