【问题标题】:Struts2: struts.xml doesn't forward to action nameStruts2:struts.xml 不转发到动作名称
【发布时间】:2012-06-25 09:18:54
【问题描述】:

您会认为这是一个大问题。但可能有一个简单的问题,我找不到原因。

在名为 'index.jsp' 的 jsp 页面中有一个表单(一个简单的登录),其动作名称为 'loginAction'。在动作类中,execute() 方法检查用户名、密码是否有效。如果它是一个有效的登录,execute() 方法返回 SUCCESS,它会转发到另一个名为 'account.jsp' 的 jsp 页面,该页面位于 WEB-INF 中名为 'jsp' 的文件夹中。

问题是,struts.xml 将所有有效登录转发到相关 url,但无法检索页面(account.jsp)。浏览器给出 404 错误。但是浏览器说“不可用”的 url 只是手动复制并粘贴到浏览器的地址栏。然后页面就显示出来了!!!
这是struts.xml文件

<struts>

<include file="/struts_auth.xml" />
<package name="default" extends="struts-default" >

    <action name="login" >
        <result>index.jsp</result>
    </action>        
    <action name="loginAction" class="com.app.action.LoginAction">
        <result name="success">/auth/acc</result>    
        <result name="input">index.jsp</result>
    </action>

</package>

这是上面struts.xml中包含的struts_auth.xml文件

<struts>

<package name="author" extends="default" namespace="/auth" >

    <action name="acc">
        <result name="success">/WEB-INF/jsp/account.jsp</result>  
        <result name="input">index.jsp</result>
    </action>   

</package>

这就是浏览器所说的原因
description: The requested resource (/app/auth/acc) is not available. 但是如果这个url(http://localhost:8084/app/auth/acc)只是复制到浏览器的地址栏中,它只是显示真实的页 。请让我知道我的问题出在哪里。

【问题讨论】:

  • 我认为您的成功结果中不需要/WEB-INF 部分。您是否尝试过没有该部分?
  • 感谢阿努先生的关注。出于某种安全目的,我放置了那个jsp。无论如何,我尝试将该帐户页面放在通常存在其他页面的 web 文件夹中。&lt;action name="acc"&gt; &lt;result name="success"&gt;/account.jsp&lt;/result&gt; &lt;result name="input"&gt;index.jsp&lt;/result&gt; &lt;/action&gt; 但它也没有工作。

标签: java jsp jakarta-ee servlets struts2


【解决方案1】:

为了更好地理解,请参阅以下链接。 How to redirect to another action

  <!-- Redirect to another namespace -->
    <result name="success" type="redirectAction">
        <param name="actionName">acc</param>
        <param name="namespace">/auth</param>
    </result>

【讨论】:

  • 非常感谢 Mohana Rao SV。它工作得很好。不幸的是,我的问题没有解决。我所做的方式(如我在问题中显示的代码)在早期的项目中工作。这次它给了我错误:(。这就是我兴奋的原因。无论如何,我可以继续你的解决方案。再次感谢:)
【解决方案2】:

问题出在这里:&lt;result name="success"&gt;/auth/acc&lt;/result&gt;. 如果节点中没有给出类型名称,则struts2本身会将dispatcher设置为默认类型。您可以像这样修改您的代码: &lt;result name="success" type="redirectAction"&gt; &lt;param name="actionName"&gt;actionName&lt;/param&gt; &lt;param name="namespace"&gt;namespace&lt;/param&gt; `

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-12
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多