How to map URL contains slash in action (Wildcard mapping)
本问题已经有最佳答案,请猛点这里访问。
我有一个包裹名称
1 | /cabinet/s |
所有操作均返回JSP片段。
以及此包下面任何URL的其余路径
1 | /cabinet/s/actionid/snippetgroup/filename.do |
- actionid-动作类的标识符
- snippetgroup-某些功能的代码段组的标识符(这只是目录名称)
- 文件名-JSP文件名
1 2 | <result>/WEB-INF/jsp/{1}/{2}.jps</result> </action> |
问题在于Struts从不调用正确的类。
Struts应用程序配置为使用
您必须根据文档在struts.xml中设置此选项:
1 2 | <constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> |
,并可能通过将
1 | <constant name="struts.action.extension" value=","/> |
否则,您可以使用正则表达式模式匹配器切换到"高级通配符"。
要使其正常工作,您需要在配置中将
1 2 | <constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> |
您可能需要将结果更改为:
1 | <result>/WEB-INF/jsp/{1}/{2}.jsp</result> |
您是否已将Struts2配置为使用
问题是您使用了指向指定程序包的相对路径。但是您应该使用绝对路径名。
1 2 3 4 | <param name="snipetgroup">{1}</param> <param name="filename">{2}</param> <result>/WEB-INF/jsp/${snipetgroup}/${filename}.jsp</result> </action> |
此技术在动作名称后称为"参数"。注意,此功能自Struts 2.2.1起可用。一旦应用,就可以在结果中使用动态参数。