I Like to use URLs like host/ActionName/123/abc/
, instead of passing query string like host/ActionName?parm1=123&parm2=abc
.
How can I do that in Struts2?
I done as below. but it is not working, showing 500 error code
<constant name="struts.enable.SlashesInActionNames" value="true"/>
<constant name="struts.mapper.alwaysSelectFullNamespace" value="false"/>
<package name="default" extends="struts-default" namespace="/">
<action name="/action/*"
class="gov.apiic.serviceRequest.action.ServiceRequest" method="method" >
<param name="p1">{1}</param>
<result name="success">views.jsp</result>
</action>
</package>
It was not possible with plain Struts2 under the 2.1+. As a workaround you can do this with UrlRewriter filter. From Struts2 2.1+ with the help of wildcards you can use something like
host/ActionNmae/param1-123/param2-abc
see this post, but not likehost/ActionNmae/123/abc/
. The difference is that in the second case there's no parameter names. The workaround is to use Parameters after the action name.You can use either the
namedVariable
orregex
pattern matchers.Each has its own advantages and disadvantages, most of which can be worked around.