你会认为这是一个很大的问题。但是可能有一个简单的问题,我找不到原因。
在一个名为'index.jsp'的jsp页面中有一个表单(一个简单的登录名),其动作名称是'loginAction'。在操作类中,execute()
方法检查用户名,密码是否有效。如果它是有效的登录,则execute()方法返回SUCCESS,该SUCCESS转发到WEB-INF内名为'jsp'的文件夹中名为'account.jsp'的另一个jsp页面。
问题是,struts.xml将所有有效登录转发给relavant url,但是无法检索页面(account.jsp)。浏览器给出了404错误。但浏览器显示“不可用”的网址只是手动复制并粘贴到浏览器的地址栏。然后页面显示!!!
这是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)刚刚复制到浏览器的地址栏中,它只显示真实页面。请告诉我我的问题所在。
答案 0 :(得分:3)
为了更好地理解,请参阅以下链接。 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>
答案 1 :(得分:1)
问题在于:<result name="success">/auth/acc</result>.
如果节点中没有给出类型名称,那么struts2本身会将调度程序设置为默认类型。您可以像这样修改代码:
<result name="success" type="redirectAction">
<param name="actionName">actionName</param>
<param name="namespace">namespace</param>
`