【问题标题】:struts.xml namespace causes 404 not found pagestruts.xml 命名空间导致 404 未找到页面
【发布时间】:2018-01-06 11:50:55
【问题描述】:

我在 Struts 2 web 项目的struts.xml 上遇到问题。 我有登录页面,登录后URL会添加/secure/*.action

我试图在struts.xml 中有两个包。一个是正​​常的/,第二个是/secure。但是登录后会导致404找不到页面。如果我在命名空间中也创建了第二个包 \ 并仅使用 / 命名空间调用 membersite.action ,那么它将可以并成功直接但 URL 中只有 /*.action 。我需要在基础设施问题中有此 URL /secure/*.action。有什么提示吗?

    <package name="awip" namespace="/" extends="tiles-default, struts-default">
    <result-types>
      <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
    </result-types>
    <global-results>
        <result name="sessionTimeout"   type="tiles">.logon.LogonForm</result>      
        <result name="errorRedirect"    type="tiles">.errorPage</result>        
    </global-results>
    <action name="logon" class="logonAction" method="displayLogonForm">
        <result name="displayLogonForm" type="tiles">.logon.LogonForm</result>
    </action>
    <action name="doLogon" class="logonAction" method="doLogon">
        <result name="displayLogonForm" type="tiles">.logon.LogonForm</result>
        <result name="displayMainPage"              type="redirectAction">
            <param name="namespace">/secure</param> 
            <param name="actionName">membersite.action</param>
        </result>
    </action>
</package>
<package name="secureAwip" namespace="/secure" extends="tiles-default, struts-default">
    <result-types>
      <result-type name="tiles" class="org.apache.struts2.views.tiles.TilesResult"/>
    </result-types>
    <global-results>
        <result name="sessionTimeout"   type="tiles">.logon.LogonForm</result>      
        <result name="errorRedirect"    type="tiles">.errorPage</result>        
    </global-results>
    <action name="membersite" method="unspecified" class="membersiteAction">
        <result name="displayMembersiteMain" type="tiles">.membersite.Main
        </result>
    </action>
 </package>

 

【问题讨论】:

    标签: java xml struts2 namespaces actionresult


    【解决方案1】:

    操作名称不应有扩展名.action。如果您使用动作名称编写它,动作映射器将找不到动作结果的适当映射。

    代码

    <param name="actionName">membersite.action</param>
    

    应该改为

    <param name="actionName">membersite</param>
    

    【讨论】:

    • 我发现了问题。因为我有 loginFilter,它将检查会话用户 ID 值。如果它为空,它将显示问题。当我跨越命名空间时,会话用户 ID 将变为空。我无法删除登录过滤器,有什么办法解决吗??
    • 什么是 loginFilter?
    • 这是定制的 java 过滤器,将应用于 contextroot url 中的每个页面。就像每个页面的 php 中的包含文件一样。
    • struts2 中是否有任何功能可以在更改命名空间的重定向操作中保留会话? .e.g 添加 true
    • 问题出在您的 loginFilter 中,而不是 struts2 中,如果它多次更改会话,它将不会在会话中保留任何数据。
    猜你喜欢
    • 2014-10-12
    • 2019-07-27
    • 1970-01-01
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-16
    • 2019-11-20
    相关资源
    最近更新 更多