在 Struts 2 中使用 UrlRewrite 设置参数变量

发布于 2024-10-25 19:07:07 字数 962 浏览 2 评论 0原文

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

我正在尝试将以下 URL:

/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 中。

I'm using Tuckey UrlRewrite in combination with a Struts2 application.

I'm trying to convert following URL:

/promotions/abcdef-987 to /dopromotions/detail passing variable id as 987.

My rewrite rule is as follows:

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

And my Struts2 Action has following getters and setters:

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

However, the variable never gets entered. When debugging, I can't find id anywhere in the parameter or attribute scope.

I've tried removing type="parameter". This puts id in the attribute scope, but it doesn't get entered in my variable Integer id.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

苦妄 2024-11-01 19:07:07

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

请参阅此答案了解NamedVariablePatternMatcher< /代码>。您需要在 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>

I'm not familiar with the URL re-writer you are using, but you can achieve this sort of mapping with Struts2 alone.

Please refer to this answer about the NamedVariablePatternMatcher. You'll need the following constants set in your struts.xml:

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

Then, map your action as:

<!-- you could also make /promotions a namespace and the action just "abcdef-{id}" -->
<action name="promotions/abcdef-{id}" class="...">
    ...
</action>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文