我正在尝试使用通配符映射我的struts操作。在此之前,我使用了Tuckey的UrlRewrite Filter。但this thread改变了主意。
所以这是我的问题:我的网址如下所示:
在这些示例中,单词“category”和“subcategory”是伪数据。用于使URL与搜索引擎更相关。
现在我想忽略这个虚拟数据,因为我只对(最后一个)ID感兴趣。在第一种情况下 123 在最后一种情况 456 。 我将如何在Struts2中执行此操作? 我尝试了以下但没有成功:
<package name="promoties" namespace="/promoties" extends="struts-default">
<action name="([0-9a-zA-Z\-_]+)-{id:([0-9]+)}$" class="CategoryAction">
<result type="tiles">categorydetail</result>
</action>
</package>
在我的struts配置中使用以下选项:
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.patternMatcher" value="regex" />
以前有人试过这个吗?我将如何在Struts2中执行此操作?
答案 0 :(得分:3)
一种方法是使用简单的通配符映射并将id组件的验证调整为struts2验证。这是一个经过测试的例子,但没有经过验证。
struts.xml 您会看到为类别定义的操作 - * 和类别 - * / subcategory - * 在第二个我们只留下第二张外卡。
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<package namespace="" name="default" extends="struts-default">
<action name="category-*" class="test.TestBean">
<param name="id">{1}</param>
<result>/WEB-INF/content/test/results.jsp</result>
</action>
<action name="category-*/subcategory-*" class="test.TestBean">
<param name="id">{2}</param>
<result>/WEB-INF/content/test/results.jsp</result>
</action>
</package>
</struts>
test.TestBean 这里我使用了一个String,但在你的情况下,你将把它改为int或Integer。您需要验证我们确实使用验证xml获取整数,或者只是实现com.opensymphony.xwork2.Validateable。
package test;
import com.opensymphony.xwork2.ActionSupport;
public class TestBean extends ActionSupport{
//public to avoid get/set to make example shorter
public String id;
}
/WEB-INF/content/test/results.jsp
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<body>
<h1>Wild Card Value</h1>
id: <s:property value="id"/>
</body>
</html>
示例1 网址:example.com/category-helloBart生成...
外卡价值
id:helloBart
示例2 网址:example.com/category-helloBart/subcategory-123生成...
外卡价值
id:123