Я нашел проблему с ModelDriven из Struts2 - PullRequest
0 голосов
/ 17 августа 2010

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

В методе execute класса действия, если вы установите компонент методом, возвращающим компоненты, Modeldriven не будет работать в JSP (<s:property "someField" /> wonне работает, поэтому вы должны ввести имя экземпляра компонента следующим образом: <s:property "myBean.someField" />).

Но если вы установите значение поля компонента, Modeldriven будет работать.

Я знаю, что вы не можетеповерь мне и думай, что я сделал что-то не так.Но это не правда!Просто попробуйте ..

public class DefaultClass extends ActionSupport implements ModelDriven<TestBean>    {
        TestBean test = new TestBean();
        DAO db = DAO.getInstance();

        public String access() throws Exception {
            //Beans setter doesn't work!
            setTest( db.getTest() );

            return SUCCESS;
        }
        public String access2() throws Exception    {
            //Field setter works! 
            test.setA(db.getA());
            test.setB(db.getB());

            return SUCCESS;
        }

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

Интересно, почему в этом нет сомнений?Я думаю, что это серьезная проблема.

1 Ответ

1 голос
/ 03 сентября 2010

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

Вы задали вопрос, но проигнорировали ответ, который был дан вам ... Перехватчик, управляемый моделью, расположен после перехватчика подготовки, но задолго до фактического выполнения действия.Это означает, что если вы хотите получить экземпляр класса вашей модели, вы должны выполнить работу методом «prepare».Когда getModel () вызывается для вашего действия, это будет ссылка на TestBean перед любой логикой в ​​любом из ваших методов действия.В своем другом вопросе, который вы связали, вы упомянули, что ожидали, что порядок будет другим, потому что вы читали об этом в книге, какая книга была?Это был не Struts 2 In Action от Мэннинга, потому что в этом они прямо заявляют (я думаю, что это страница 65) -

Мы должны отметить одну ловушку, чтобы избежать.К тому времени, когда метод execute () вашего действия ModelDriven был вызван, фреймворк получил ссылку на ваш объект модели, который он будет использовать в запросе.

...