struts2通配符的应用以及action、result、package的name和namespace属性同名时的处理方法
1.对于同一个<package>下两个name属性相同的<action>,struts2是这样处理的,后面的<action>将覆盖前面的<action>
2.对于同一个<action>下两个name属性相同的<result>,struts2是这样处理的,后面的<result>将覆盖前面的<result>
3.配置文件中两个同name属性的<package>(无论是否在同一xml文件中),struts2是这样处理的,启动tomcat时,会报错。
4.配置文件中两个不同name属性,但namespace属性相同的<package>,struts是这样处理的,将两个<package>下的<action>合并,遇到相同name属性的<action>时,后面<package>定义的<action>将覆盖前面<package>的<action>。
最近在项目中使用了通配符缩减繁杂的result配置,(例如:如果访问这个http://localhost:8080/project/admin/photo_edit.jhtml,Action中方法的返回值为photo_edit,寻找相应的jsp页面为photo_edit.jsp)默认的dispatcher转发都没有什么问题,但如果出现特殊的需要处理的result时,遇到了问题,比如下面我想在访问edit这个方法是redirectAction到photo_query这个action处理:
1个通配符<action name="*_*" class="f{1}Action" method="{2}"><result name="success">/WEB-INF/page/front/${contents}/${jspFile}</result><result name="{1}_{2}">/WEB-INF/page/front/home/{1}_{2}.jsp</result></action>根据上面的分析,两个通配符的使用会大大的缩减package中Action的配置,所以使用了上面的配置,但是不要忘记了需要特殊处理的返回值,例如上面的返回值为success的,我就是使用的动态确认返回值。通配符的使用的前提是action、method和jsp页面都要有统一的命名规范。