Почему перехватчик Struts 2 не может изменить страницу результатов, созданную последующими перехватчиками? - PullRequest
4 голосов
/ 30 марта 2012

Я читал Struts2 в действии , и он сказал, что если перехватчик B срабатывает после перехватчика A , и B определяетэтот элемент управления не должен быть допущен к действию (поскольку могут быть ошибки проверки, как это было сделано DefaultWorkFLowInterceptor ).Затем он возвращает «ввод» .. и страница отображается для пользователя.Затем элемент управления возвращается к перехватчику A , но A не может сейчас изменить результат, поскольку страница уже отправлена ​​клиенту.

Но,поскольку перехватчик B возвращает только строку, перехватчик A может просто вернуть другую строку вместо нее, и результат изменится. DefaultWorkFLowInterceptor возвращает просто строку, фактически ничего не записывает в поток ответов, поэтому, когда управление возвращается к своим предшествующим перехватчикам, почему они не могут изменить ввод?

Ответы [ 2 ]

7 голосов
/ 30 марта 2012

Даже если вы измените строку результата, будет слишком поздно, поскольку результат уже был представлен клиенту (UI).

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

Если вы хотите изменить результат, вы можете использовать PreResultListener .A PreResultListener может повлиять на вызов действия между фазой перехватчика / действия и фазой результата.Типичное использование включает переключение на другой Результат или каким-либо образом модификацию объектов Результат или Действие перед выполнением Результата.

Подробнее см. Документ

0 голосов
/ 30 марта 2012

У меня сложилось впечатление, что перехватчик вызывает другой перехватчик (и, следовательно, строка, возвращаемая перехватчиком, принимается предшествующей, которую он может модифицировать).Фактически, перехватчик вызывает метод invoke класса ActionInvocation , который, в свою очередь, вызывает следующий перехватчик.Это также означает, что строка результата, возвращаемая перехватчиком, будет сначала получена ActionInvocation , которая может фактически отобразить страницу ответа клиенту перед передачей управления предшествующим перехватчикам.

...