ActionMappingParametersInteceptor-зачем мне это нужно
Я пытаюсь понять использование класса ActionMappingParametersInteceptor
в Struts2.
Глядя в API:
Этот перехватчик устанавливает все параметры из отображения действий, для этого запрос в стеке значений. Он работает точно так же, как
ParametersInterceptor
, только параметры исходят изActionMapping
, а не методActionContext.getParameters()
.
Есть ли случай, когда класс ActionMapping
может содержать другой набор параметров запроса, чем те, которые я получаю из ActionContext.getParameters()
?
Распорки defaultStack
перехватчиков, кажется, вызывает сначала ParametersInterceptor
, а затем ActionMappingParametersInteceptor
, но я просто не вижу причин для этого.
1 ответ:
Фактически
actionMappingParams
, расширяющий перехватчикparams
, обрабатывает параметры из карты действий с помощью двух методов, которые переопределяются и должны быть переопределены:retrieveParameters
иaddParametersToContext
. Первый метод действительно работает с параметрамиActionMapping
. Во-вторых, в контекст действия добавляются дополнительные параметры.В этом классе это no-op, так как параметры были извлечены из то же место. В подклассах как
retrieveParameters()
, так иaddParametersToContext()
должно быть отменено." no-op" означает никогда не работать до
Лучший способ добавить поведение к этому перехватчику-использовать
ParameterNameAware
интерфейс в ваших действиях. Однако, если вы хотите чтобы применить глобальное правило, которое не реализовано в вашем действии, то вы можно было бы расширить этот перехватчик и переопределить МетодParametersInterceptor.acceptableName(String)
.ParameterNameAware:
Этот интерфейс реализуется действиями, которые хотят объявить приемлемые параметры. Работает совместно с
ParametersInterceptor
. Для например, действия могут захотеть создать белый список параметров, которые они примут, или черный список параметров они будут отклонять, чтобы предотвратить установку клиентами других неожиданных (и возможно, опасные) параметры.Это единственный случай, когда в контекст действия можно добавить дополнительные параметры.