UrlRewrite Struts2 установка переменных параметров

Я использую 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 есть следующие методы получения и установки:

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

Однако переменная никогда не вводится. При отладке я не могу найти "id" в области параметров или атрибутов.

Я пытался удалить 'type="parameter"'. Это помещает "id" в область видимости атрибута, но не вводится в мой Integer ID

1 ответ

Решение

Я не знаком с перезаписывающим устройством 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>
Другие вопросы по тегам