Изменение параметров после привязки в Struts 2

У меня есть действие, которое получает некоторые параметры от пользователя (например, дата). Это действие создает много разных отчетов, поэтому у него много разных методов. Мне нужно настроить эти параметры (установить время до полуночи) перед каждым методом. prepare Метод выполняется до привязки параметров. Есть ли какой-либо другой перехватчик или какое-либо другое соглашение, которое позволяет мне сделать это?

2 ответа

Решение

Использовать <interceptor-ref name="paramsPrepareParamsStack"/>

<!-- An example of the params-prepare-params trick. This stack
    is exactly the same as the defaultStack, except that it
    includes one extra interceptor before the prepare interceptor:
    the params interceptor.

    This is useful for when you wish to apply parameters directly
     to an object that you wish to load externally (such as a DAO
     or database or service layer), but can't load that object
     until at least the ID parameter has been loaded. By loading
     the parameters twice, you can retrieve the object in the
     prepare() method, allowing the second params interceptor to
     apply the values on the object. -->

Если вы используете плагин Конвенции, примените его к действию

@Action(value="action1", interceptorRefs=@InterceptorRef("paramsPrepareParamsStack"))

Другой путь (дешевый, если вы кодируете прямо сейчас, дорогой, если вы уже все закодировали) - это модульное каждое действие, которое вы должны выполнить в одном действии Struts2.

Тогда у вас будет что-то вроде BaseReportAction, содержащий все общие атрибуты и методы, используемые совместно protected вместо private, настраивая параметры и общие операции в execute() Способ;

И одно действие для каждого отчета, расширяющего действие BaseReportAction, скажем,

ExcelReportAction, PdfReportAction и т. Д.

или же

MinimalReportAction, CompleteReportAction и т. Д.

или также

DailyReportAction, MonthlyReportAction и т. Д.

И единственным требованием будет использование super.execute(); как первое утверждение каждого ребенка действий execute() метод.

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

Все служебные методы, используемые в нескольких отчетах, будут доступны только для этих отчетов, но не для всех остальных (скажем, для PDF и XLS)...

Вы могли бы также воспользоваться проверкой XML для разных действий (возможно, один отчет требует разных входных данных от другого).

Наконец, ваш код настройки будет поточно-ориентированным (действия поточно-ориентированными, перехватчики - нет).

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

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