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>