Как передать параметр от одного действия к другому


Привет я новичок в Struts2 и хочу отправить параметр от одного действия к другому на перенаправление

Моя форма похожа на

<s:form action="saveComment">
                            <s:push value="ai">
                                <s:hidden name="id"/>
                                <table cellpadding="5px">
                                    <tr><td><s:textarea name="description" rows="5" cols="60" theme="simple" />
                                        </td>
                                        <td> <s:submit type="image" src="images/sbt.gif"  >
                                             </s:submit>
                                        </td></tr>

                                </table>
                            </s:push>
                        </s:form>

И мои распорки.xml-файл имеет вид

 <action name="saveComment" method="saveComment" class="com.weaverants.web.AIAction">

        <result name="success" type="redirect">
            <param name="actionName">displayAI</param>
            <param name="aiId">${aiId}</param>
        </result>

    </action>


   <action name="displayAI" method="displayAI"  class="com.weaverants.web.AIAction">
        <result name="success" >/display_ai.jsp</result>
    </action>
2 3

2 ответа:

Вы уже передаете параметры в свой saveComment все, что вам нужно, чтобы объявить тип результата как redirectAction, указав имя action как перенаправление и любые другие необходимые параметры. как

<action name="gatherReportInfo" class="...">
      <result name="showReportResult" type="redirectAction">
         <param name="actionName">generateReport</param>
         <param name="namespace">/genReport</param>
         <param name="reportType">pie</param>
         <param name="width">100</param>
         <param name="height">100</param>
         <param name="empty"></param>

      </result>
   </action> 

Сгенерированный перенаправленный URL будет

 /genReport/generateReport.action?reportType=pie&width=100&height=100

С другой стороны, использование типа результата в качестве redirect означает, что ответ должен перенаправить браузер в указанное место (новый запрос от клиента). в этом случае также экземпляр действия, ошибки действия, ошибки поля и т. д. executed теряется и больше не доступен, и единственный способ передать параметры-по URL или через сеанс

Можно использовать тот же код, что и для перенаправления

Разница между Redirect и actionRedirect заключается в том, что первый будет использовать HttpServletResponse#sendRedirect(String) sendRedirect, в то время как более поздний будет использоваться struts2 фреймворк ActionMapper, предоставляемый ActionMapperFactory, так как гораздо лучше использовать, чем Redirect результат.

Для передачи данных рядом с шаблоном URL для этих типов результатов вы может использовать

  1. сеанс сохранения данных между действиями перенаправления.
  2. ScopeInterceptor .

Вы также можете попробовать использовать результат цепочки вместо redirectAction.Все параметры из первого действия будут переданы во второе действие, но вам нужно иметь геттеры и сеттеры параметров во втором действии. Это выглядело бы примерно так:

<result type="chain">
<param name="actionName">home</param>
<param name="namespace">/secure</param>
</result>