我试图了解Struts2中ActionMappingParametersInteceptor
类的使用。
在API中查看:
为此,此拦截器会设置动作映射中的所有参数
请求,在值堆栈上。它完全像
ParametersInterceptor
,只有参数来自
ActionMapping
,而不是ActionContext.getParameters()
方法。
是否存在ActionMapping
类可能包含与我从ActionContext.getParameters()
获得的请求参数不同的一组请求参数的情况?
拦截器的struts defaultStack
似乎先调用ParametersInterceptor
,然后再调用ActionMappingParametersInteceptor
,但是我只是看不到这样做的原因。
最佳答案
实际上,扩展actionMappingParams
拦截器的params
正在使用两种应被覆盖且应被覆盖的方法来处理操作映射中的参数:retrieveParameters
和addParametersToContext
。第一种方法确实使用ActionMapping
参数。第二个添加额外的参数到动作上下文。
在此类中,这是一个空操作,因为参数是从
相同的位置。在子类中,retrieveParameters()
和
addParametersToContext()
应该被覆盖。
“无操作”表示直到
向此拦截器添加行为的最佳方法是利用
您的操作中的ParameterNameAware
接口。但是,如果您愿意
应用未在您的操作中实施的全局规则,那么您
可以扩展此拦截器并覆盖
ParametersInterceptor.acceptableName(String)
方法。
ParameterNameAware:
该接口由要声明的动作实现
可接受的参数。与...协同工作
ParametersInterceptor
。例如,动作可能要创建一个
他们将接受的参数白名单或参数黑名单
他们将拒绝以防止客户设置其他意外内容(以及
参数)。
只有在可以将额外的参数添加到动作上下文时,这是唯一的情况。