Struts2 изменить действие из другого действия - PullRequest
1 голос
/ 30 декабря 2011

Мне было интересно, можно ли изменить некоторые поля для действия struts2 из другого действия.Например, у меня есть действие Class1 с полем string1, и я хочу изменить его на другое действие, Class2.

public class Class1 extends ActionSupport{

    private String string1="old String";

}

public class Class2 extends ActionSupport{

    public String execute(){
        Class1 class1=new Class1();
        class1.setString1("new String");
    }

}

В Struts1 можно взять все ActionForms из сеанса.В Struts2 они больше не доступны в сеансе с того момента, как больше нет форм действий.Спасибо!

Ответы [ 2 ]

3 голосов
/ 30 декабря 2011

Экземпляры действия Struts2 создаются, когда запрос соответствует отображению действия для действия.Каждый раз создается новый экземпляр.

Они действуют до тех пор, пока не закончится обработка запроса и после этого станут недоступны.

Следовательно, вам нужно каким-то образом сопоставить запрос с двумя действиями одновременно, что невозможно с AFAIK, или выполнить какой-то другой трюк, который бы пошел против модели Struts2.

Если вам нужнопередать информацию от одного действия к другому, у вас есть несколько вариантов, например:

  • поместить ее в сеанс
  • поместить ее в базу данных
  • отправить обратноклиент и повторно отправить на сервер со следующим запросом.
0 голосов
/ 30 декабря 2011

Перехватчик и интерфейс ScopedModelDriven и интерфейс допускают разумное факсимиле форм действий в рамках сеанса (более или менее идентичных на уровне модели).

Это действительно зависит от вашего варианта использования - если вы пытаетесь реализовать формы действий в рамках сеанса, это способ сделать это.

Если ваша цель больше «установить значение для произвольного действия», ScopedModelDriven может быть не лучшим подходом. Например, мне нужно было установить значения для произвольных действий (а не типа «мастер форм») и использовать перехватчик и аннотации, чтобы я мог извлекать данные из нескольких источников и устанавливать их для различных несмежных действий.

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

...