如何从struts2中的url接收get参数

时间:2012-05-26 17:52:46

标签: java struts-1 seo struts2

我正在使用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是参数 /

由于

2 个答案:

答案 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插件是另一种选择,或者是正则表达式匹配器,具体取决于您的需求。