Передача параметров в URL без строки запроса в Struts 2

Мне нравится использовать URL-адреса, такие как host/ActionName/123/abc/вместо передачи строки запроса, например host/ActionName?parm1=123&parm2=abc,

Как я могу сделать это в 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>

2 ответа

Решение

Это было невозможно с простыми Struts2 под 2.1+. В качестве обходного пути вы можете сделать это с помощью фильтра UrlRewriter. Из Struts2 2.1+ с помощью подстановочных знаков вы можете использовать что-то вроде host/ActionNmae/param1-123/param2-abc увидеть этот пост, но не как host/ActionNmae/123/abc/, Разница в том, что во втором случае нет имен параметров. Обходной путь должен использовать Параметры после имени действия.

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

Вы можете использовать либо namedVariable или же regex сопоставители

У каждого есть свои преимущества и недостатки, большинство из которых можно обойти.

Другие вопросы по тегам