我有一个包
/cabinet/s
所有操作都返回JSP片段。
以及此包的任何网址的其余路径
/cabinet/s/actionid/snippetgroup/filename.do
<action name="actionid/*/*" class="someclass">
<result>/WEB-INF/jsp/{1}/{2}.jps</result>
</action>
问题是Struts从不调用正确的类。始终存在filename
动作不存在的错误。
Struts应用程序配置为使用.do
扩展名而不是.action
。
答案 0 :(得分:2)
为了实现此目的,您需要在配置中将struts.enable.SlashesInActionNames
设置为true
并将struts.mapper.alwaysSelectFullNamespace
设置为false
。
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
您可能需要将结果更改为:
<result>/WEB-INF/jsp/{1}/{2}.jsp</result>
您是否还将Struts2配置为使用.do
作为操作扩展名?如果不是,则需要将其从网址中删除。
答案 1 :(得分:2)
您必须在struts.xml according to the documentation中设置此选项:
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
和可能删除.do
扩展名,方法是将其设置为空(或更好地使用逗号,以防止Struts handling static resources as namespaces):< / p>
<constant name="struts.action.extension" value=","/>
否则,您可以使用正则表达式模式匹配器切换到Advanced Wildcards。
答案 2 :(得分:0)
问题是您使用指定包的相对路径。但是你应该使用绝对路径名。
<action name="actionid/*/*" class="someclass">
<param name="snipetgroup">{1}</param>
<param name="filename">{2}</param>
<result>/WEB-INF/jsp/${snipetgroup}/${filename}.jsp</result>
</action>
此技术称为Parameters after the action name。请注意,自Struts 2.2.1起,此功能可用。应用后,您可以使用dynamic parameters in result。