今天在struts2中的<global-results>以及<default-action-ref>配置时遇到了一下问题,希望初学者注意一下:
先直接上配置文件:
<package name="login" namespace="/user" extends="struts-default">
<!--
global-results表示一个全局的结果集,即在该包下的任何一个action中所共享
result结果集.若果想让该结果集被其他包共享,需要继承该package即可
-->
<global-results>
<result name="mainpage">/loginSuccess.jsp</result>
</global-results>
<!--
default-action-ref表示在该namespace中没有找到相应的action的时候,就会选择默认的 action来进行执行
-->
<default-action-ref name="default" />
<action name="default">
<result>
/default.jsp
</result>
</action>
<action name="login2" class="com.lgh.LoginAction">
<result name="login">
/loginError.jsp
</result>
</action>
</package>
但是在使用IDE部署的时候,出现如下错误:
Caused by: org.xml.sax.SAXParseException;
systemId: file:/D:/Program%20Files%20(x86)/apache-tomcat-6.0.37-windows-x64/apache-tomcat-6.0.37/webapps/Struts2_1600_GlobalResult/WEB-INF/classes/struts.xml;
元素类型为 "package" 的内容必须匹配 "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-exception-mappings?,action*)"。
关键是红色字段的错误提示,他告诉我们package的内容必须按照
result-types---->interceptors
---->default-interceptor-ref
---->default-action-ref
---->default-class-ref
---->global-results
---->global-exception-mappings
---->action*
的顺序进行配置struts.xml文件。 所以我按照该顺序重新编写后,问题果然得到了解决。
而且,经过查看struts2.3.dtd文件,中也确实是如此的定义了package下的 子元素(result-types,interceptors..)必须按照给定的顺序出现0次或1次。
<!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, default-action-ref?, default-class-ref?, global-results?, global-exception-mappings?,
action*)>