1

我正在使用 struts2 并进行了配置,因此 url 看起来像 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 /这里 biz & name 是 2 个参数/ www.myweb.com/index/biz/name/23 /这里 biz & name & 23 是参数/

谢谢

4

2 回答 2

2

您可以使用通配符模式来传递参数。

<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) {...}
}

如果请求的 URL 是/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当请求一个 URL like 时,将调用ProfileAction,其“id”字段将设置为123

于 2016-06-14T06:59:52.010 回答
0

使用 patternMatcher,通配符用于做其他事情。

http://struts.apache.org/2.x/docs/wildcard-mappings.html

使用 REST 插件是另一种选择,或正则表达式匹配器,具体取决于您的需要。

于 2012-05-26T17:57:52.120 回答