日期:2014-05-18  浏览次数:20690 次

关于struts2寻找匹配action过程的疑问
           请问如果配置文件struts.xml是由多个xml文件组合而成,这几个xml文件是通过<include file="xxxx.xml"/>包含到struts xml文件中,那么在加载过程中是不是只是将这几个xml文件中的内容复制过去,没有做加工整合?
   举例  struts-a.xml文件配置了
   

<package name="adminMsg" extends="struts-default" namespace="/admin">
。。。。。     
   </package> 

在struts-b.xml文件配置了

<package name="adminMsg" extends="struts-default" namespace="/admin">
     <action name="movielist" class="movieAction" method="list">
       <result>/admin/movielist.jsp</result>
     </action>
   </package>

struts.xml文件中包含顺序

<include file="。。。/struts-a.xml"/>
  <include file="。。。/struts-b.xml" />

这时如果系统访问xxxx/admin/movielist时 会提示没有找到action

两个配置文件 条件  包名跟namespace都相同,include的顺序是a文件先,b文件后,如果是有再整合,那么不应该找不到action,我想到的解释是,struts2 在寻找匹配的action时,是对每个namespace匹配的包进行寻找action,但是由于a文件中没有找到匹配action,那么到b文件时,系统以为b文件中的那个包已经寻找过了,所以跳过??是这样吗?


如果是这样的话,是不是要求所有包名都不能相同?配置文件中包名是唯一的??

------解决方案--------------------
struts2中的每个package的名称不能相同,这是struts2开发手册里面明确写着的
------解决方案--------------------
应该是复制过去的 
不管分几个文件,最后都是加载一个文件 你这样做好像没什么意义
------解决方案--------------------
最近也在学习Struts2,也遇到这个问题了,觉得包名不可以相同!

------解决方案--------------------
命名空间一样你为什么不写在同一个包里面
它只认第一个admin 后面那个忽略了我估计
因为命名空间必须不一样的
你那样写相当于是写了2个包 命名空间都是admin 所以它默认只读第一个吧