如果我有一个url:www.myurl.com/books并希望能够通过将和作为参数传递给操作类来创建<s:url>关于作者和年份的新过滤器,则该操作类将呈现具有适当结果的书页。如何在Struts2中做到这一点?www.myurl.com/books/Sartre/1942``Sartre``1942
www.myurl.com/books
<s:url>
www.myurl.com/books/Sartre/1942``Sartre``1942
我具有后端逻辑,因此如果满足以下条件,那就更好了:
www.myurl.com/books/Sartre/1942
你需要Advanced Wildcard Mappings。
Advanced Wildcard Mappings
从文档中:Struts2的高级通配符映射:
高级通配符 从2.1.9+开始,可以在操作名称中定义正则表达式。要使用这种形式的通配符,必须设置以下常量: <constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> <constant name="struts.patternMatcher" value="regex" /> 正则表达式可以有两种形式,最简单的一种是 {FIELD_NAME},在这种情况下,FIELD_NAME将使用匹配的文本填充操作中带有的字段,例如: <package name="books" extends="struts-default" namespace="/"> <action name="/{type}/content/{title}" class="example.BookAction"> <result>/books/content.jsp</result> </action> </package> 在此示例中,如果/fiction/content/Frankenstein请求了url ,则BookAction的字段“ type”将设置为“ fiction”,而字段“ title”将设置为“ Frankenstein”。
高级通配符
从2.1.9+开始,可以在操作名称中定义正则表达式。要使用这种形式的通配符,必须设置以下常量:
<constant name="struts.enable.SlashesInActionNames" value="true"/> <constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/> <constant name="struts.patternMatcher" value="regex" />
正则表达式可以有两种形式,最简单的一种是 {FIELD_NAME},在这种情况下,FIELD_NAME将使用匹配的文本填充操作中带有的字段,例如:
{FIELD_NAME}
FIELD_NAME
<package name="books" extends="struts-default" namespace="/"> <action name="/{type}/content/{title}" class="example.BookAction"> <result>/books/content.jsp</result> </action> </package>
在此示例中,如果/fiction/content/Frankenstein请求了url ,则BookAction的字段“ type”将设置为“ fiction”,而字段“ title”将设置为“ Frankenstein”。
/fiction/content/Frankenstein
type
fiction
title
Frankenstein
如果使用Struts2-Convention-Plugin,您的示例将是:
@Action(value="/books/{author}/{year}") public class Books extends ActionSupport { private String author; private Integer year; /* ...GETTERS AND SETTERS HERE... */ public String execute(){ /* ...LOAD DATA HERE... */ if (noDataFound) return NONE; return SUCCESS } }
如果您需要在prepare()method中使用这些参数,请阅读此问题。
prepare()