ActionMappingParametersInteceptor-зачем мне это нужно


Я пытаюсь понять использование класса ActionMappingParametersInteceptor в Struts2.

Глядя в API:

Этот перехватчик устанавливает все параметры из отображения действий, для этого запрос в стеке значений. Он работает точно так же, как ParametersInterceptor, только параметры исходят из ActionMapping, а не метод ActionContext.getParameters().

Есть ли случай, когда класс ActionMapping может содержать другой набор параметров запроса, чем те, которые я получаю из ActionContext.getParameters()?

Распорки defaultStack перехватчиков, кажется, вызывает сначала ParametersInterceptor , а затем ActionMappingParametersInteceptor, но я просто не вижу причин для этого.

1 3

1 ответ:

Фактически actionMappingParams, расширяющий перехватчик params, обрабатывает параметры из карты действий с помощью двух методов, которые переопределяются и должны быть переопределены: retrieveParameters и addParametersToContext. Первый метод действительно работает с параметрами ActionMapping. Во-вторых, в контекст действия добавляются дополнительные параметры.

В этом классе это no-op, так как параметры были извлечены из то же место. В подклассах как retrieveParameters(), так и addParametersToContext() должно быть отменено.

" no-op" означает никогда не работать до

Лучший способ добавить поведение к этому перехватчику-использовать ParameterNameAware интерфейс в ваших действиях. Однако, если вы хотите чтобы применить глобальное правило, которое не реализовано в вашем действии, то вы можно было бы расширить этот перехватчик и переопределить Метод ParametersInterceptor.acceptableName(String).

ParameterNameAware:

Этот интерфейс реализуется действиями, которые хотят объявить приемлемые параметры. Работает совместно с ParametersInterceptor. Для например, действия могут захотеть создать белый список параметров, которые они примут, или черный список параметров они будут отклонять, чтобы предотвратить установку клиентами других неожиданных (и возможно, опасные) параметры.

Это единственный случай, когда в контекст действия можно добавить дополнительные параметры.