使用OGNL 在Struts 2中使用2个操作参数创建动态URL

如果我有一个url: www.myurl.com/books并希望能够通过传递Sartre1942作为参数来创建新的过滤作者和年份: www.myurl.com/books/Sartre/1942到动作类,它将使书页显示适当的结果。 如何在Struts2中执行此操作?

我有后端逻辑,所以如果:

  1. 我可以重用与永久链接www.myurl.com/books使用的相同的jsp和动作类。
  2. 即使在get请求加载了页面之后, www.myurl.com/books/Sartre/1942在地址栏中显示动态呈现的URL www.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()方法中使用这些参数,请阅读此问题 。