Как работать с представлением в Struts 2?
В старом servlets
я могу использовать doGet
а также doPost
методы. В которой doGet
я пересылаю пользователя на какую-то страницу и в doPost
Я обрабатываю данные, введенные со страницы, которую я дал. Это все происходит в одном сервлете.
Но Struts2 работает по шаблону Front Controller и вместо этого doGet/doPost
у меня есть только execute
метод. Итак, как я могу правильно предоставить пользователю некоторую страницу, чтобы он мог ее видеть, вводить данные, отправлять и подавать заявку, в результате обработав ее в execute
?
Из того, что я знаю, у меня есть два варианта (пример в регистрационной форме):
Страница карты с другим URL:
<action name="register_display"> <result name="success" type="dispatcher">register.jsp</result> </action> <action name="register" class="magazine.action.client.RegisterClientAction" method="execute"> <result name="success" type="redirectAction">/index</result> <result name="error" type="redirectAction">register_display </result> </action>
Создать весь пакет с именем
display
и разместите там все представления, из которых можно выполнить POST:<package name="display" namespace="/display" extends="struts-default"> <action name="register"> <result name="success" type="dispatcher">register.jsp</result> </action> ... </package>
Есть ли другие варианты? Какой из них предпочтительнее?
1 ответ
В стандартном стиле Struts2 класс Action имеет только один метод работы, это execute
метод. Тем не менее, вам не обязательно следовать этому. Вы можете определить несколько действий в одном классе действий.
Например, вы делаете запрос GET users
, который обрабатывается по умолчанию execute
метод UsersAction
,
@Override
public String execute() {
// fetch the list of users
return SUCCESS;
}
Предположим, вы хотите добавить нового пользователя в это же действие, отправив сообщение в user_add
, Итак, вы определяете add
метод:
public String add() {
// add the user
return SUCCESS;
}
struts.xml
будет выглядеть примерно так:
<package name="users" extends="defaultPackage">
<action name="users" class="com.example.UsersAction">
<result>users.jsp</result>
</action>
<action name="user_add" class="com.example.UsersAction" method="add">
<result type="redirect">users</result>
</action>
</package>
В вашем сценарии вы должны отобразить свою страницу, которую пользователь должен увидеть после запуска (возможно, пустой) execute
метод. Затем вы должны выполнить запрос post, который будет сопоставлен с другим методом класса Action.