Struts 2: параметры между действиями - PullRequest
8 голосов
/ 24 апреля 2009

У меня следующий вопрос: Мне нужно передать параметр (например, ID), когда я закончу форму, и действие сохранит значения формы, это будет перенаправлено на result = "success", и мне нужно, чтобы действие, которое будет вызываться при успехе, сопровождалось Идентификатор и другие параметры для последующего использования в следующей форме для сохранения этой информации (info-form2 и info.form1) ...

например:

ФОРМА1 (ПОЛЬЗОВАТЕЛЬ) ==== "success" ====> ФОРМА2 (АДРЕС)

userForm.html ===================> addressForm.html? User_id = X ... (где X: Id прошел бросок UserAction (метод : сохранить) в AddressAction (метод: новый адрес))

Пожалуйста, я буду признателен за вашу помощь

Заранее спасибо

Ответы [ 3 ]

29 голосов
/ 24 апреля 2009

Вы использовали слово «вперед», но похоже, что вы хотите перейти на новую страницу (address.html), чтобы собрать больше информации об адресе. В этом случае вам необходимо перенаправить на страницу адреса после завершения действия пользователя.

<action name="user" class="UserAction">
  <!-- Redirect to another namespace -->
  <!-- for Struts 2.2 --> <result type="redirectAction">
  <!-- for Struts 2.0 <result type="redirect-action"> -->
    <param name="actionName">collect-address</param>
    <param name="userId">${userId}</param>
  </result>
</action>

Синтаксис $ {userId} вызовет getUserId для вашей UserAction и передаст этот параметр, как показано в вашем вопросе: addressForm.html? User_id = X. Аргумент collect-address может иметь успешный результат, который идет в addressForm.html. Документы здесь. Если вы хотите избежать использования другого действия, вы можете попробовать , используя result type = "redirect" и пропустить все таким образом.

Если вы действительно хотите переслать, вы можете использовать цепочка действий . Это обескуражен Тедом Хастедом из команды Struts2 , но это может сработать для вас.

Вместо цепочки действий попробуйте объединить весь код для выполнения этого запроса в одном действии и использовать вспомогательные классы или классы обслуживания для User и Address для разделения и повторного использования кода вместо «цепочки действий».

3 голосов
/ 24 апреля 2009

Не очень понятно, что вы хотите сделать.

Похоже, что после успешного выполнения действия запрос перенаправляется другому действию. В первом действии вы хотите передать идентификатор параметра и использовать его во втором действии. Поскольку оба действия используются в одном и том же вызове запроса, вы можете сохранить параметр ID в запросе, как этот

request.setAttribute ("ID", iDValueObject);

Во втором действии вы можете извлечь значение идентификатора, как это

request.getAttribute ( "ID");

0 голосов
/ 19 июля 2011

Это должно работать:

  <!--  Package Default -->
    <package name="**default**" extends="struts-default,json-default" namespace="/">
        <action name="noOp" class="com.web.myapp.action.NoOpAction">
           <result name="success" type="chain">
                    <param name="requiresValidation">true</param>
                    <param name="actionName">userAuthentication</param>
                    <param name="namespace">/user</param>
          </result>
        </action>   
    </package>
    <!--  Package User -->
    <package name="user" extends="struts-default,json-default" namespace="/user">
    <action name="userAuthentication" class="com.web.myapp.action.AuthenticateAction">
    ...
    </action>
...