如果有一个请求参数“名称”传递给某个操作,如果我们有一个名为“”的字段,我们可以在操作类中接收它”。哪个拦截器负责这样做?我查看了ParametersInterceptor
的代码,但它只将参数设置到值堆栈,而不是在动作类的相应字段中
答案 0 :(得分:1)
但它只将参数设置到值堆栈上,而不是 动作类的相应字段
你的推理中只有一点小故障:动作类位于值堆栈的顶部!所以com.opensymphony.xwork2.interceptor.ParametersInterceptor负责。
答案 1 :(得分:0)
作为一条建议,我建议您在动作类中实际上没有名为“name”的参数,而是将这些字段从您的动作类移动到另一个将作为“您的”的类中。模型”。然后,让您的操作类实现ModelDriven接口。这将把模型类放在ValueStack的顶部而不是动作类实例,然后“name”参数将映射到您的模型实例。
将模型/数据问题与操作/控制问题分离为另一个类将使您的代码更具可读性和可维护性。当然,如果只有一个参数,那么将它分成一个单独的类是愚蠢的。但是,超过2或3个参数,你将从分离中受益。