5

我需要一种通过一个请求执行多个 struts 操作的方法。目标是尽量减少对服务器的请求需求。所以我需要的是类似“MultiAction”的东西,它获取一个动作列表作为它应该执行的参数,然后返回这个动作的“组合”结果。

例如:

  • 客户端分为很多模块
  • 一个模块需要从服务器获取信息
  • 客户端有一个代理处理这个请求
  • 这个代理现在会说“嘿​​,其他模块,我要向服务器发出请求,你需要什么吗?”
  • 其他模块现在可以选择在代理处提交请求
  • 然后将实际的“组合”请求发送到服务器,结果再次被拆分并提供给请求它的模块

所以我的问题是:

  1. Struts2 中是否有标准的方法来做这样的事情?
  2. 是否有一种标准的“公共”方式来手动调用另一个动作并从值堆栈中获取其结果?
4

3 回答 3

2

这可以通过在结果类型中使用“redirectAction”来实现。以下代码是相同的示例。您必须根据使用嵌套动作的要求在 struts XML 中配置动作标记。

     <action name="userHomeAction" class="com.etp.connect.struts.action.UserHomeAction">
        <result type="redirectAction" name="SUCCESS_EDIT">
            <param name="actionName">getUserEditData</param>
            <param name="selectedUser">${selectedUser}</param>        
        </result>
        <result name="error">/jsp/userMgmt/Users_Home.jsp</result>
        <result name="login">/jsp/loginMgmt/Login.jsp</result>
    </action>
于 2017-12-17T10:08:45.770 回答
0

Request > Action 1 > Action 2 > Response 在 Struts 2 中,这可以通过 Chain Result 来实现。链结果是一种结果类型,它使用自己的拦截器堆栈和结果调用动作。这个拦截器允许一个动作将请求转发到一个目标动作,同时传播源动作的状态。以下是如何定义此序列的示例。

    <package name="public" extends="struts-default">
            <action name="createUserAccount"
                class="net.onlineSolution.CreateAccountAction">
                <result name="success" type="chain">login</result>
            </action>
            <action name="login"
                class="net.onlineSolution.LoginAction">
                <result name="success" type="chain">showDashboard</result>
            </action>
            <action name="showDashboard"
                class="net.onlineSolution.DashboardAction">
                <result name="success">/WEB-INF/jsp/dashboard.jsp</result>
            </action>
    </package>

在上面的代码中,我们定义了三个动作:createUserAccount、login 和 showDashboard。注意每个动作是如何使用标签链接到下一个动作的。因此,当用户第一次登录系统时,将使用 createAccount 操作。创建帐户后,用户将被转发到登录操作。

于 2013-05-12T08:24:53.037 回答
0

出色地。使用简单的 struts 结果类型是非常有可能的。要在单个操作中处理多个操作,您可以<result name="success" type="redirectAction"></result>在结果属性中使用。通过这些多个操作,您还可以使用struts.xml<param>的属性传递 n 个参数。以下示例代码供您参考:-

<result name="success" type="redirectAction">
     <param name="actionName">[.. you can write another action here ..]</param>
     <param name="[.. parameter name ..]">${.. parameter name ..}</param>
</result>
于 2015-12-15T06:04:41.460 回答