UrlRewrite Struts2 установка переменных параметров - PullRequest
1 голос
/ 25 марта 2011

Я использую 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 Ответ

2 голосов
/ 27 марта 2011

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