一个接一个地执行多个动作

时间:2013-04-08 09:36:51

标签: struts2 struts

我需要一种使用一个请求执行多个struts操作的方法。目标是最小化对服务器的请求的需要。所以我需要的是像“MultiAction”这样的东西,它将一个动作列表作为它应该执行的参数,然后返回这个动作的“组合”结果。

例如:

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

所以我的问题是:

  1. Struts2中有关于如何做这样的事情的标准方法吗?
  2. 是否有一种标准的“公开”方式手动调用另一个操作并从值Stack中获取结果?

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

    <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操作。创建帐户后,用户将转发到登录操作。

答案 2 :(得分: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>