在做SSH整合项目是使用通配符方法调用时一直报错:There is no Action mapped for namespace [/] and action name [user_registPage] associated with context path [/shop_ssh_war_exploded].
Action映射配置如下:
<package name="useraction" extends="struts-default" namespace="/">
<!-- 配置用户模块的Action -->
<action name="user_*" class="cn.itcast.shop.user.action.UserAction" method="{1}">
<result name="{1}">/WEB-INF/{1}.jsp</result>
</action>
</package>
报错:
在网上搜了发现,我使用的struts2.5的,struts2.3对于通配符+占位符组合模式的action方法的动态调用是默认开启的,但struts2.5为了更加安全和严谨,将其默认设置为关闭,所以需要在struts2.5版本的struts.xml中添加动态调用:
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>
同时.在struts2的2.5版本中添加了对方法访问的权限,所有在action内部还要增加"allowed-methods"方法的标签
<action name="user_*" class="cn.itcast.shop.user.action.UserAction" method="{1}" >
<result name="{1}">/WEB-INF/jsp/{1}.jsp</result>
<allowed-methods>registPage,loginPage</allowed-methods>
</action>
同时,struts.xml的约束文件应该变成
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
否则"allowed-methods"标签将不能被识别而报错。