【问题标题】:Setting parameter variables using UrlRewrite in Struts 2在 Struts 2 中使用 UrlRewrite 设置参数变量
【发布时间】:2011-07-22 18:03:00
【问题描述】:

我将Tuckey UrlRewrite 与 Struts2 应用程序结合使用。

我正在尝试转换以下网址:

/promotions/abcdef-987/dopromotions/detail 将变量 id 传递为 987

我的重写规则如下:

<rule>
    <from>^/(promoties|promotions)/([0-9a-zA-Z\-_]+)-([0-9]+)$</from>
    <set type="parameter" name="id">$3</set>
    <to>/dopromotions/detail</to>
</rule>

我的 Struts2 Action 有以下 getter 和 setter:

private Integer id;
public void setId(Integer id){
    this.id = id;
}
public Integer getId(Integer id){
    return id;
}

但是,变量永远不会被输入。调试时,在参数或属性范围内的任何地方都找不到id

我已尝试删除 type="parameter"。这会将id 置于属性范围内,但不会将其输入到我的变量Integer id 中。

【问题讨论】:

  • 顺便提一下:这种方法确实有效,但是在使用 Maven 时要小心。 Maven 仅包含最新版本 3.1,而 方法从 3.2 开始实现

标签: java url-rewriting struts2 tuckey-urlrewrite-filter


【解决方案1】:

我不熟悉您使用的 URL 重写器,但您可以单独使用 Struts2 实现这种映射。

关于NamedVariablePatternMatcher,请参考this answer。您需要在 struts.xml 中设置以下常量:

<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.patternMatcher" value="namedVariable"/>

然后,将您的操作映射为:

<!-- you could also make /promotions a namespace and the action just "abcdef-{id}" -->
<action name="promotions/abcdef-{id}" class="...">
    ...
</action>

【讨论】:

  • 哇,我不知道这个!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-18
  • 2014-04-16
  • 1970-01-01
相关资源
最近更新 更多