Struts2 перенаправляет на другое действие с неизвестным количеством параметров

У меня есть действие при входе в систему, которое после успешного выполнения перенаправляет на предыдущую страницу (я сохраняю предыдущую страницу в своем сеансе, чтобы получить ее позже). В Struts2 я могу найти два способа сделать это перенаправление:

    <action name="login" class="com.myapp.login.Login">
        <result name="redirect" type="redirect">${previousAction.requestURL}</result>   
    </action>

В этом примере будет вызван метод getPreviousAction(). GetRequestURL() (это самодельный метод, который не относится к struts2), и он вернет URL предыдущей страницы, как и предполагалось, например:

somenamespace/index.action

Существует также другой тип перенаправления:

<action name="login" class="com.myapp.login.Login">
     <result type="redirectAction">
        <param name="actionName">${previousAction.name}</param>
        <param name="namespace">/${previousAction.namespace}</param>
    </result>   
</action>

Я хочу использовать этот тип результата перенаправления, потому что он намного чище. Но у меня есть проблема, когда параметры запроса являются частью URL. Например:

somenamespace/index.action?name=john&age=50

Я знаю, что могу добавить эти параметры жестко закодированными в мой struts.xml, но проблема в том, что мое действие при входе в систему должно перенаправлять на ЛЮБОЕ ранее вызванное действие, и я заранее не знаю, какие параметры запроса были у предыдущих действий. Это отличается от типичного варианта использования, где вы точно знаете, на какое действие вы перенаправляете

Очень плохим решением, которое я нашел, было добавление КАЖДОГО возможного параметра (сбор всех параметров всех моих действий в struts.xml), а затем использование опции:

<param name="suppressEmptyParameters">true</param>

1 ответ

Решение

Вы можете сохранить имя действия, пространство имен и параметры из ActionMapping,

ActionMapping mapping = ServletActionContext.getActionMapping();

Вы также можете сохранить строку запроса вместо карты параметров.

String params = request.getQueryString();

Добавить параметры динамически в redirectAction В результате вы должны использовать OGNL в динамическом параметре.

<param name="actionName">${previousAction.name +'?'+ parameters}</param>

Предположим, у вас есть добытчик для parameters и инициализировал его из сеанса, в котором вы сохранили предыдущую строку запроса, имя действия и пространство имен.

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