我试图了解Struts2中ActionMappingParametersInteceptor类的使用。

在API中查看:

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

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

拦截器的struts defaultStack似乎先调用ParametersInterceptor,然后再调用ActionMappingParametersInteceptor,但是我只是看不到这样做的原因。

最佳答案

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

在此类中,这是一个空操作,因为参数是从
相同的位置。在子类中,retrieveParameters()
addParametersToContext()应该被覆盖。

“无操作”表示直到

向此拦截器添加行为的最佳方法是利用
您的操作中的ParameterNameAware接口。但是,如果您愿意
应用未在您的操作中实施的全局规则,那么您
可以扩展此拦截器并覆盖
ParametersInterceptor.acceptableName(String)方法。

ParameterNameAware:

该接口由要声明的动作实现
可接受的参数。与...协同工作
ParametersInterceptor。例如,动作可能要创建一个
他们将接受的参数白名单或参数黑名单
他们将拒绝以防止客户设置其他意外内容(以及
参数)。

只有在可以将额外的参数添加到动作上下文时,这是唯一的情况。

08-15 17:05