ActionMappingParametersInteceptor - 为什么我需要它

时间:2013-03-10 10:22:37

标签: java parameters struts2 interceptor

我试图理解在Struts2中使用ActionMappingParametersInteceptor类。

查看API:

  

此拦截器为动作映射设置所有参数   请求,在价值堆栈上。它的运作完全像   ParametersInterceptor,只有参数来自   ActionMapping,而不是ActionContext.getParameters()方法。

是否存在ActionMapping类可能包含与我从ActionContext.getParameters()获取的请求参数不同的请求参数集的情况?

拦截器的struts defaultStack似乎先调用ParametersInterceptor然后调用ActionMappingParametersInteceptor,但我看不出有任何理由这样做。

1 个答案:

答案 0 :(得分:2)

实际上扩展actionMappingParams拦截器的params正在使用两个被覆盖且应该被覆盖的方法处理动作地图中的参数:retrieveParametersaddParametersToContext。第一种方法真正使用ActionMapping参数。第二个是将额外参数添加到操作上下文中。

  

在这个类中,这是一个无操作,因为参数是从中获取的   同一个地方。在子类retrieveParameters()和。{   {/ 1}}应该被覆盖。

“no-op”意味着永远不会工作

  

向此拦截器添加行为的最佳方法是使用   行动中的addParametersToContext()界面。但是,如果你愿意的话   要应用未在您的操作中实现的全局规则,那么您   可以扩展这个拦截器并覆盖   ParameterNameAware方法。

ParameterNameAware:

  

此接口由要声明的操作实现   可接受的参数与...一起使用   ParametersInterceptor.acceptableName(String)。例如,操作可能想要创建一个   他们将接受的参数白名单或参数黑名单   他们会拒绝阻止客户设置其他意外(和   可能危险的参数。

这是唯一可以将额外参数添加到操作上下文的情况。