2013-01-19 34 views
2

我喜歡使用像host/ActionName/123/abc/這樣的URL,而不是像host/ActionName?parm1=123&parm2=abc那樣傳遞查詢字符串。在Struts 2中傳遞URL中沒有查詢字符串的參數

我該如何在Struts2中做到這一點?

我做了如下。但它不工作,表現出500錯誤代碼

<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

它叫SEO友好的URL和你可以找到答案在http://stackoverflow.com/a/5443736/1085285或http://stackoverflow.com/a/5762548/1085285 –

+0

非常感謝您的迴應。我做了一些努力,但沒有運氣。 – Sagar

回答

2

這是不可能用普通的Struts2的2.1+下。作爲解決方法,您可以使用UrlRewriter filter來完成此操作。從Struts2 2.1+在通配符的幫助下,您可以使用類似host/ActionNmae/param1-123/param2-abc的文章,請參閱this文章,但不能使用host/ActionNmae/123/abc/。不同之處在於第二種情況下沒有參數名稱。解決方法是使用Parameters after the action name

@Action(value = "/ActionNmae/*/*", params = {"param1", "{1}", "param2", "{2}"} 
+1

是的,你可以用模式匹配器映射器(我忘記了它叫什麼)。 –

1

您可以使用該namedVariableregex模式匹配器。

各有其優點和缺點,其中大部分都可以解決。

相關問題