如果我有一个 url: www.myurl.com/books
并希望能够创建新的<s:url>
过滤作者和年份:www.myurl.com/books/Sartre/1942
,方法是将Sartre
和1942
作为参数传递给操作类,这将呈现具有适当结果的书籍页面。如何在 Struts2 中执行此操作?
我有后端逻辑,所以
如果:- 我可以重用与永久链接相同的 jsp 和操作类
www.myurl.com/books
用途。 - 显示动态呈现的 URL
www.myurl.com/books/Sartre/1942
在地址栏中,即使在 GET 请求加载页面后(不是www.myurl.com/books
,就是这样(。
你需要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
请求,BookAction 的字段"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()
请阅读此问题。