我正在使用struts2&配置,以便网址看起来像 www.myweb.com/index而非www.myweb.com/index.action
但是现在我遇到的问题是我应该如何在struts.xml文件中映射&获取请求参数 就像在struts1中我可以通过mapping.getParameters()接收它,但struts2中有什么可用的呢?
<action path="/profile/*"
type="net.viralpatel.struts.cleanurl.ProfileAction"
parameter="{1}">
<forward name="success" path="/profile.jsp" />
<forward name="fail" path="/profile.jsp" />
</action>
字符串参数= mapping.getParameter();
所以在struts2中,如果我点击 www.myweb.com/index/p=2 www.myweb.com/index/biz/name/ here biz&amp;名称是2个参数 / www.myweb.com/index/biz/name/23 / here biz&amp;名字和23是参数 /
由于
答案 0 :(得分:1)
您可以使用通配符模式传递参数。
<action name="/profile/*" class="net.viralpatel.struts.cleanurl.ProfileAction">
<param name="id">{1}</param>
<result>
<param name="location">/profile.jsp</param>
<param name="id">{1}</param>
</result>
</action>
您还可以使用命名参数
<constant name="struts.patternMatcher" value="namedVariable"/>
@Namespace{"/users/{userID}");
public class ProfileAction exends ActionSupport {
private Long userID;
public void setUserID(Long userID) {...}
}
如果请求网址为/users/10/detail
,则 ProfileAction 将被执行,其userID
字段将设置为 10 。
要在URL中使用参数,请在操作名称后确保已设置:
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
然后动作映射将如下所示:
<package name="edit" extends="struts-default" namespace="/edit">
<action name="/profile/*" class="net.viralpatel.struts.cleanurl.ProfileAction">
<param name="id">{1}</param>
<result>/profile.jsp</result>
</action>
</package>
当请求/edit/profile/123
之类的网址时,系统会调用 ProfileAction ,其“id”字段将设置为 123 。
答案 1 :(得分:0)
使用patternMatcher,通配符用于执行其他操作。
http://struts.apache.org/2.x/docs/wildcard-mappings.html
使用REST插件是另一种选择,或者是正则表达式匹配器,具体取决于您的需求。