Установка переменных параметров с помощью UrlRewrite в Struts 2

Я использую 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.


person Bart Vangeneugden    schedule 25.03.2011    source источник
comment
Просто отметим: этот метод работает, однако будьте осторожны при использовании Maven. Maven содержит только последнюю версию 3.1, а методы ‹set› реализованы начиная с 3.2.   -  person Bart Vangeneugden    schedule 30.03.2011


Ответы (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>
person Steven Benitez    schedule 26.03.2011
comment
Вау, я этого не знал! Спасибо! - person Bart Vangeneugden; 28.03.2011