问题
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]+)$</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 Integer id
回答1:
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>
来源:https://stackoverflow.com/questions/5430073/urlrewrite-struts2-setting-parameter-variables