为什么我不能将一个动作重定向到Struts2中的另一个动作?

时间:2012-06-08 14:56:20

标签: java struts2

我正在使用Struts2。我有一个对话框,其中包含通过“search_users”操作更新的人员列表。在此列表旁边,我有一个表单,您可以通过在提交表单时调用“add_user”操作来添加其他人。

我要做的是,一旦执行了add_user操作,就会使用“search_user”操作更新列表。

我尝试在struts.xml中使用结果类型“redirect”,如下所示:

<action name="search_users" class="org.apache.struts.gestion_edt.controller.adm_proyectos.BLSubequipo" method="searchUsers">
            <result name="success">list.jsp</result>
        </action>

        <action name="add_user" class="org.apache.struts.gestion_edt.controller.adm_proyectos.BLTipoEntregable" method="addUser">
            <result name="success" type="redirectAction">search_users</result>
        </action>

但这不起作用。我究竟做错了什么?我应该添加到我不知道的struts.xml文件中吗?

这是我得到的错误消息:

"Caused by: There is no result type defined for type 'redirect-action' mapped with name 'success'.  Did you mean 'redirectAction'? - result - file:/.../struts.xml:59:44
    at ..."

3 个答案:

答案 0 :(得分:14)

当前配置:

<action name="add_user" class="org.apache.struts.gestion_edt.controller.adm_proyectos.BLTipoEntregable" method="addUser">
   <result name="success" type="redirectAction">search_users</result>
</action>

根据documentation正确格式:

<action name="add_user" class="org.apache.struts.gestion_edt.controller.adm_proyectos.BLTipoEntregable" method="addUser">
    <result type="redirectAction">
        <param name="actionName">search_users</param>
        <!--<param name="namespace">/secure</param> This is optional if your action where you are redirecting is in the same namespace you can leave this, if your action is in some other name space then provide the namespace--> 
    </result>
</action>

答案 1 :(得分:2)

目前使用 Struts 2.3.20 ,这有效:

<result type="redirectAction">myAction</result>

我在之前的版本中没有确认。

答案 2 :(得分:0)

我不是一个伟大的Struts家伙,但基于文档看起来你的重定向在语法上是不正确的:http://struts.apache.org/2.1.6/docs/redirect-action-result.html

<package name="public" extends="struts-default">
    <action name="login" class="...">
        <!-- Redirect to another namespace -->
        <result type="redirect-action">
            <param name="actionName">dashboard</param>
            <param name="namespace">/secure</param>
        </result>
    </action>
</package>