Как работать с представлением в Struts 2?

В старом servlets я могу использовать doGet а также doPost методы. В которой doGet я пересылаю пользователя на какую-то страницу и в doPost Я обрабатываю данные, введенные со страницы, которую я дал. Это все происходит в одном сервлете.

Но Struts2 работает по шаблону Front Controller и вместо этого doGet/doPost у меня есть только execute метод. Итак, как я могу правильно предоставить пользователю некоторую страницу, чтобы он мог ее видеть, вводить данные, отправлять и подавать заявку, в результате обработав ее в execute?

Из того, что я знаю, у меня есть два варианта (пример в регистрационной форме):

  1. Страница карты с другим 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>
    
  2. Создать весь пакет с именем 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.

Другие вопросы по тегам