使用OGNL 在Struts 2中使用2个操作参数创建动态URL
如果我有一个url: www.myurl.com/books
并希望能够通过传递Sartre
和1942
作为参数来创建新的
过滤作者和年份: www.myurl.com/books/Sartre/1942
到动作类,它将使书页显示适当的结果。 如何在Struts2中执行此操作?
我有后端逻辑,所以如果:
- 我可以重用与永久链接
www.myurl.com/books
使用的相同的jsp和动作类。 - 即使在get请求加载了页面之后,
www.myurl.com/books/Sartre/1942
在地址栏中显示动态呈现的URLwww.myurl.com/books/Sartre/1942
(即www.myurl.com/books
)。
您需要Advanced Wildcard Mappings
。
从文档中: Struts2的高级通配符映射 :
高级通配符
从2.1.9+开始,可以在动作名称中定义正则表达式。 要使用这种forms的通配符,必须设置以下常量:
正则表达式可以有两种forms,最简单的是
{FIELD_NAME}
,在这种情况下,操作中具有FIELD_NAME
的字段将填充匹配的文本,例如:
/books/content.jsp 在此示例中,如果请求url
/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()
方法中使用这些参数,请阅读此问题 。