我试图理解在Struts2中使用ActionMappingParametersInteceptor
类。
查看API:
此拦截器为动作映射设置所有参数 请求,在价值堆栈上。它的运作完全像
ParametersInterceptor
,只有参数来自ActionMapping
,而不是ActionContext.getParameters()
方法。
是否存在ActionMapping
类可能包含与我从ActionContext.getParameters()
获取的请求参数不同的请求参数集的情况?
拦截器的struts defaultStack
似乎先调用ParametersInterceptor
然后调用ActionMappingParametersInteceptor
,但我看不出有任何理由这样做。
答案 0 :(得分:2)
实际上扩展actionMappingParams
拦截器的params
正在使用两个被覆盖且应该被覆盖的方法处理动作地图中的参数:retrieveParameters
和addParametersToContext
。第一种方法真正使用ActionMapping
参数。第二个是将额外参数添加到操作上下文中。
在这个类中,这是一个无操作,因为参数是从中获取的 同一个地方。在子类
retrieveParameters()
和。{ {/ 1}}应该被覆盖。
“no-op”意味着永远不会工作
向此拦截器添加行为的最佳方法是使用 行动中的
addParametersToContext()
界面。但是,如果你愿意的话 要应用未在您的操作中实现的全局规则,那么您 可以扩展这个拦截器并覆盖ParameterNameAware
方法。
ParameterNameAware:
此接口由要声明的操作实现 可接受的参数与...一起使用
ParametersInterceptor.acceptableName(String)
。例如,操作可能想要创建一个 他们将接受的参数白名单或参数黑名单 他们会拒绝阻止客户设置其他意外(和 可能危险的参数。
这是唯一可以将额外参数添加到操作上下文的情况。