这一次非常有必要对struts的namespace进行研究了,今天做了个项目,什么都成功了,后来我想着把jsp页面进行分类,然后由于namespace的问题而浪费很长时间。针对namespace来彻底研究下。
我的项目名为testBlog6
Webapp下建了page文件夹,再下面是open文件夹,最后error.jsp。
配置文件,struts.xml
(错误的写法)
<package name="struts2" namespace="/page/open" extends="struts-default">
<action name="login" class="org.cyxl.ssh.action.LoginAction" method = "select">
<result>/error.jsp</result>
</action>
</package>
这样会出现HTTP Status 404 - /testBlog6/error.jsp
错误的写法
<package name="struts2" namespace="/" extends="struts-default">
<action name="login" class="org.cyxl.ssh.action.LoginAction" method = "select">
<result>/page/open/error.jsp</result>
</action>
</package>
会出现HTTP Status 404 - There is no Action mapped for action name page.
正确的写法:
<package name="struts2" namespace="/page/open" extends="struts-default">
<action name="login" class="org.cyxl.ssh.action.LoginAction" method = "select">
<result>/page/open/error.jsp</result>
</action>
</package>
接下来是另一个问题,版本还是struts2.1.8.
<result name = "success" type = "redirectAction">index.action</result>
而用是struts2.3.7完全不存在这种问题。
要想用这,就必须得换成index。而不是indexAction。
而且以前jsp中用得*.action都得换了,只能用*。
我struts.xml就这:(不包括package)
<constant name="struts.multipart.saveDir" value="/tmp"/>
<include file="struts-default.xml" />
第三个:
无法理解,用的struts2.1.8,结果写了个action,这样的:
<struts>
<constant name="struts.multipart.saveDir" value="/tmp"/>
<constant name="struts.ui.templateDir" value="template" />
<constant name="struts.ui.templateSuffix" value="ftl" />
<constant name="struts.objectFactory" value="spring" />
<constant name="struts.devMode" value="true" />
<constant name="struts.action.extension" value="do" />
<constant name="struts.custom.i18n.resources" value="application_messages" />
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<include file="struts-default.xml" />
<constant name="struts.multipart.maxSize" value="9999999999" />
<package name="struts-whfood" extends="struts-default,json-default">
<interceptors>
<interceptor-stack name="myStack">
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack" />
</package>
<package name="struts2" extends="struts-default">
<action name="loginAction!*" class="org.cyxl.ssh.action.LoginAction" method = "{1}">
<result name="success">index.jsp</result>
<result name = "input">/page/open/error.jsp</result>
</action>
<action name="index" class="indexAction">
<interceptor-ref name="defaultStack" />
<result name = "selete">/page/open/index.jsp</result>
<result name = "error">/page/open/error.jsp</result>
</action>
</package>
</struts>
写了个action name为index,然后我执行action为loginAction,结果直接执行了index,根本就没判断result。以后尽量避免将action设置成index吧。