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

问题描述 投票:5回答:3

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

例如:

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

所以我的问题是:

  1. Struts2中有一种标准的方法可以解决这个问题吗?
  2. 是否有一种标准的“公共”方式手动调用另一个动作并从值Stack中获取结果?
struts2 struts
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>

0
投票

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


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>
© www.soinside.com 2019 - 2024. All rights reserved.