Как передать параметр от одного действия к другому
Привет я новичок в 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 ответа:
Вы уже передаете параметры в свой
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 для этих типов результатов вы может использовать
- сеанс сохранения данных между действиями перенаправления.
- ScopeInterceptor .
Вы также можете попробовать использовать результат цепочки вместо
redirectAction
.Все параметры из первого действия будут переданы во второе действие, но вам нужно иметь геттеры и сеттеры параметров во втором действии. Это выглядело бы примерно так:<result type="chain"> <param name="actionName">home</param> <param name="namespace">/secure</param> </result>