2013-03-10 89 views
3

我想了解在Struts2中使用ActionMappingParametersInteceptor类。ActionMappingParametersInteceptor - 为什么我需要它

寻找在API中:

这个拦截设置所有参数从动作映射,为此 请求,该值堆栈上。它的工作完全一样 ParametersInterceptor,只有参数来自 ActionMapping,而不是ActionContext.getParameters()方法。

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

的支柱拦截defaultStack似乎是先调用ParametersInterceptor然后ActionMappingParametersInteceptor,但我看不到任何理由这样做。

回答

2

实际上actionMappingParams它扩展了params拦截器使用被重写和应该重写两种方法处理从动作映射参数:retrieveParametersaddParametersToContext。第一种方法真的用ActionMapping参数。第二个是将额外的参数添加到动作上下文中。

在这种类,这是一个无操作中,由于参数是从取出的 同一位置上。在子类中,retrieveParameters()addParametersToContext()应被覆盖。

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

的最好方法添加行为到这个拦截器是利用你的行动 ParameterNameAware接口。但是,如果你想 申请未在你的行动实现一个全球性的规则,那么你 可以扩展这个拦截系统并重写 ParametersInterceptor.acceptableName(String)方法。

ParameterNameAware:

此接口由希望申报 可接受的参数的行动来实现。与 ParametersInterceptor一起工作。例如,动作可能想创建一个 白名单的参数,他们将接受或paramters 的黑名单,他们将拒绝以防止客户端设置其他意外(和 可能是危险的)参数。

这是唯一的情况下,额外的参数可以添加到行动上下文。

+0

非常感谢。这是有道理的。 – panas 2013-03-10 22:24:18

相关问题