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