3

我试图了解ActionMappingParametersInteceptorStruts2 中类的使用。

在 API 中查看:

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

有没有一种情况,一个ActionMapping类可能包含一组不同的请求参数,而不是我从中得到的ActionContext.getParameters()

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

4

1 回答 1

2

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

在此类中,这是一个无操作,因为参数是从同一位置获取的。在子类中,两者都retrieveParameters()应该 addParametersToContext()被覆盖。

“no-op”意味着永远不会工作,直到

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

参数名称感知:

此接口由想要声明可接受参数的操作实现。与 ParametersInterceptor. 例如,操作可能想要创建他们将接受的参数的白名单或他们将拒绝的参数的黑名单,以防止客户端设置其他意外(并且可能是危险的)参数。

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

于 2013-03-10T18:06:17.457 回答