【问题标题】:Creating dynamic URL with 2 action parameters in Struts 2 using OGNL [duplicate]使用OGNL在Struts 2中创建具有2个动作参数的动态URL [重复]
【发布时间】:2013-12-04 10:27:10
【问题描述】:

如果我有一个 url:www.myurl.com/books 并且希望能够创建新的 <s:url> 过滤作者和年份:www.myurl.com/books/Sartre/1942 通过将 Sartre1942 作为参数传递给将呈现的操作类具有适当结果的书籍页面。如何在 Struts2 中做到这一点?

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

  1. 我可以重用与永久链接相同的 jsp 和操作类 www.myurl.com/books 使用。
  2. 显示动态呈现的 URL www.myurl.com/books/Sartre/1942 即使在获取请求已加载页面后,地址栏中 (不是www.myurl.com/books,也就是说)。

【问题讨论】:

  • 只有在数据库中找到作者和年份的参数时才会呈现页面。
  • 您的意思是如果参数不匹配,则操作不会返回结果?

标签: java jsp url struts2 ognl


【解决方案1】:

您需要Advanced Wildcard Mappings

来自文档:Struts2's Advanced Wildcard Mappings

高级通配符

从 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>

在本例中,如果 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() 方法中使用这些参数,read this question

【讨论】:

  • 嗨,我对这种类型的配置和图块有问题,只能使用类返回,但如果它与其他类调用,则执行执行方法但返回失败
猜你喜欢
  • 2015-12-01
  • 2013-09-15
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 2023-03-18
  • 2012-02-01
相关资源
最近更新 更多