Java ActionMappingParametersInteceptor-我为什么需要它

Java ActionMappingParametersInteceptor-我为什么需要它,java,parameters,struts2,interceptor,Java,Parameters,Struts2,Interceptor,我试图理解Struts2中的ActionMappingParameters在接收器类中的用法 查看API: 此拦截器将为此设置操作映射中的所有参数 请求,在值堆栈上。它的工作原理与 参数接收器,只有参数来自 ActionMapping,而不是ActionContext.getParameters()方法 是否存在这样的情况,ActionMapping类可能包含与我从ActionContext.getParameters()获取的请求参数不同的请求参数集 拦截器的strutsdefaultStac

我试图理解Struts2中的
ActionMappingParameters在接收器
类中的用法

查看API:

此拦截器将为此设置操作映射中的所有参数 请求,在值堆栈上。它的工作原理与
参数接收器
,只有参数来自
ActionMapping
,而不是
ActionContext.getParameters()
方法

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


拦截器的struts
defaultStack
似乎首先调用了
参数sinterceptor
,然后调用了
ActionMappingParametersinterceptor
,但是我看不出有什么理由这样做。

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

在这个类中,这是一个no-op,因为参数是从 同一地点。在子类中,
retrieveParameters()
addParametersToContext()
应该被覆盖

“不工作”意味着永远不工作,直到

向该拦截器添加行为的最佳方法是利用
ParameterNameAware
操作中的接口。但是,如果你愿意 若要应用操作中未实现的全局规则,则 可以扩展此拦截器并覆盖
参数接受程序。接受名称(字符串)
方法

ParameterNameAware:

此接口由要声明的操作实现 可接受的参数。协同工作
参数接收器
。例如,操作可能希望创建一个 他们将接受的参数白名单或参数黑名单 他们将拒绝,以防止客户端设置其他意外(和 可能是危险的)参数

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