问题
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>
回答1:
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 like host/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.
@Action(value = "/ActionNmae/*/*", params = {"param1", "{1}", "param2", "{2}"}
回答2:
You can use either the namedVariable or regex pattern matchers.
Each has its own advantages and disadvantages, most of which can be worked around.
来源:https://stackoverflow.com/questions/14411736/passing-parameters-in-url-without-query-string-in-struts-2