从行动转向行动

时间:2011-12-14 16:51:30

标签: struts action forward actionform

我的时区下午好。

我正在使用struts框架开发一个Web应用程序。 以一种简单的方式,当用户调用应用程序时,第一个要调用的Action是SecurityAction,然后此操作重定向到两个操作之一,这就是我如何进行重定向:

     if (user == "type_profile")
           forward = mapping.forward("action2Fwd");
     else
           forward = mapping.forward("action3Fwd");
     return forward;

在struts-config.xml中我有

<global-forwards>
    <forward name="action2Fwd" path="/action2.do"/>
    <forward name="action3Fwd" path="/action3.do"/>
 </global-forwards>
<action path="/action2"
            type="com.teste.dummy.action2"
            name="actionForm" 
            validate="true"
            input="/action2.jsp">
 </action>

我的第一个问题:这是从动作重定向到另一个动作的最佳方式吗?

第二个问题:当我重定向到另一个动作时,actionForm会执行,我怎么知道这个请求来自另一个动作?

如果请求来自另一个动作,我不想验证任何内容,所以我必须知道这个请求来自另一个动作,而不是来自“浏览器”,一个解决方案是放一些标志在请求或会话范围内指示此请求来自另一个操作,但这是最好的方法吗?

2 个答案:

答案 0 :(得分:1)

如果您需要根据表单的来源启用/禁用验证,最简单的解决方案是在表单中放置一个标记。

该标志可由自定义请求处理器处理,以提供应用程序范围的行为。不太优雅的是,动作基类可以根据其存在情况手动调用验证。

除了定义前进和返回之外,没有其他很好的方法可以转发 - 无论是全局还是非全局,都取决于您的应用程序的需求。

答案 1 :(得分:0)

我必须在我的一个项目中这样做。这就是我解决问题的方法。我希望它适合你。

我使用JavaScript从我的jsp调用了这个动作SelectCopyFromProjectAction.do。这个动作称为另一个类,它做了更多的工作。

来自jsp

function selectThisCopyProject(){
    document[0].action = "SelectCopyFromProjectAction.do";
    submitForm2();
}       

<强> struts.config

<action path="/SelectCopyFromProjectAction" type="*****.SelectCopyFromProjectAction" scope="request">
    <forward name="success" path="LoadProjectionCopyLOBAction.do?actionType=loadProjects" />
    <forward name="failure" path="/WEB-INF/jsp/project_list.jsp"/>
</action>

中学班级 转发struts中的新动作。配置 <forward name="success" path="LoadProjectionCopyLOBAction.do" />

如果转发是“成功”,则会在配置中导致此操作:

<action path="/LoadProjectionCopyLOBAction" type="*******.LoadProjectionCopyLOBAction" name="ProjectCopyFormBean" validate="false" scope="request"  >
    <forward name="" .... />
</action>