如何映射url包含操作中的斜杠(通配符映射)

时间:2014-03-12 13:00:54

标签: java configuration struts2 url-parameters wildcard-mapping

我有一个包

/cabinet/s

所有操作都返回JSP片段。

以及此包的任何网址的其余路径

/cabinet/s/actionid/snippetgroup/filename.do
  • actionid - 操作类的标识符
  • snippetgroup - 某些功能的片段组标识符(这只是一个目录名称)
  • filename - jsp filename
<action name="actionid/*/*" class="someclass">
   <result>/WEB-INF/jsp/{1}/{2}.jps</result>
</action>
问题是Struts从不调用正确的类。始终存在filename动作不存在的错误。

Struts应用程序配置为使用.do扩展名而不是.action

3 个答案:

答案 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

相关问题