2

在我的时区下午好。

我正在使用 struts 框架开发一个 Web 应用程序。以一种简单的方式,当用户调用应用程序时,要调用的第一个动作是 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 将执行,我怎么知道这个请求来自另一个动作?

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

4

2 回答 2

1

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

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

除了定义转发和返回之外,没有其他好方法可以在操作之间转发 - 无论它是否是全局的,都是次要的,并且取决于您的应用程序的需求。

于 2011-12-14T16:59:56.430 回答
0

我不得不在我的一个项目中做到这一点。这就是我解决问题的方法。我希望它对你有用。

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

从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>

次要类 转发一个新的动作,如在支柱中看到的那样。配置 <forward name="success" path="LoadProjectionCopyLOBAction.do" />

如果转发是“成功的”,它会导致配置中的这个动作:

<action path="/LoadProjectionCopyLOBAction" type="*******.LoadProjectionCopyLOBAction" name="ProjectCopyFormBean" validate="false" scope="request"  >
    <forward name="" .... />
</action>
于 2014-01-27T16:07:42.593 回答