1

如果有一个请求参数' name '传递给一个动作,如果我们有一个名为' name '的字段,我们可以在我们的Action类中接收它。哪个拦截器负责执行此操作?我查看了代码,但它只将参数设置到值堆栈上,而不是在动作类的相应字段中ParametersInterceptor

4

2 回答 2

1

但它只将参数设置到值堆栈上,而不是在动作类的相应字段中

您的推理中有一个小故障:动作类位于值堆栈的顶部!所以 com.opensymphony.xwork2.interceptor.ParametersInterceptor 负责。

于 2012-04-26T22:21:49.370 回答
0

不过,作为一条建议,我建议您实际上在操作类上没有名为“名称”的参数,而是将这些字段从您的操作类移动到另一个将用作您的“模型”的类中。然后,让您的操作类实现 ModelDriven 接口。这会将模型类放置在 ValueStack 的顶部而不是操作类实例上,然后“name”参数将映射到您的模型实例上。

将模型/数据关注点与动作/控制关注点分离到另一个类将使您的代码更具可读性和可维护性。当然,如果只有一个参数,那么将它分成一个单独的类将是愚蠢的。但是,超过 2 或 3 个参数,您将从分离中受益。

于 2012-04-29T21:44:44.627 回答