Struts 2 - постоянное значение свойства для действия перенаправления - PullRequest
1 голос
/ 02 февраля 2012

Я хочу сохранить значение свойства после перенаправления на другое действие.Я знаю, что значение исчезнет, ​​так как мы переходим к другому действию (запросу).Но мне нужно кое-как, как это, как я могу достичь этого?

Вот мой код:

<action name="save" class="saveAction" method="saveData">
            <result name="success" type="redirectAction">redirectedPageAction</result>
            <result name="successView" >successView.jsp</result>
            <result name="error" >error.jsp</result>
</action>

    <action name="redirectedPageAction" class="month" method="">
        <result name="success">employeesList.jsp</result>
    </action>

В классе действий сохранения я использую метод addActionMessage (String msg), чтобы установить значение,Также у меня есть getter / setter для того же самого.

Я попробовал это, но не получил успеха:

    <action name="redirectedPageAction" class="month" method="">
          <result name="success">employeesList.jsp>
               <param name="msg">${msg}</param>    
          </result>
    </action>

Я хочу значение, которое было установлено adActionMessage (msg) в моем списке сотрудников.Страница JSP.Я получаю исключение для нулевых указателей.

Пожалуйста, помогите ..

Ответы [ 4 ]

1 голос
/ 02 февраля 2012

Я сталкивался с этой проблемой раньше, иногда вам нужно показывать совершенно новое представление после действия, а результат перенаправления не учитывает какие-либо предыдущие данные (http-запрос).Мы хотели создать пользовательский перехватчик, но перед тем, как это сделать, я нашел этот http://www.mail-archive.com/user@struts.apache.org/msg77854.html

Это действительно помогло наммного.

Сказав это, какую версию Struts 2 вы используете?Мы используем Struts 2.2.3, и параметры, переданные в redirectAtion, работают нормально.У вас есть сеттер и геттер в обоих действиях?

1 голос
/ 02 февраля 2012

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

Теперь у вас есть несколько вариантов

  1. Попробуйте использовать встроенную поддержку Struts2 для этого хранилища сообщений-перехватчиков .

Этот перехватчик был создан длясохранять сообщения / ошибки и полевые ошибки действия ValidationAware в HTTP-сеансе и очень полезно в вашем случае использования.

Если вы хотите расширить область действия, вы можете сохранить данные в сеансе и получить их на более позднем этапе или можетепередать значения в качестве параметров запроса.

1 голос
/ 02 февраля 2012

Действия создаются по запросу.Если вы на самом деле ничего не передаете от первого действия ко второму, не будет ничего для извлечения второго действия.Получатели не изменяют механику HTTP.

Если вас особенно интересуют сообщения и т. Д., Используйте MessageStoreInterceptor или сделайте это вручную.

0 голосов
/ 02 февраля 2012

Вы можете передать переменную своего свойства с redirectAction в качестве параметра, подобного этому

<action name="save" class="saveAction" method="saveData">
            <result name="success" type="redirectAction">
               <param name="actionName">redirectedPageAction</param>
               <param name="msg">${msg}</param>
            </result>
            <result name="successView" >successView.jsp</result>
            <result name="error" >error.jsp</result>
</action>

Кроме того, не пропустите добавление getter / setter для msg переменной в вашем redirectedPageAction action

...