Struts2 为什么struts 2在action类中调用set()方法两次?

Struts2 为什么struts 2在action类中调用set()方法两次?,struts2,action,setter,getter,Struts2,Action,Setter,Getter,我在struts.xml中使用过类似的内容: action name="{product}/{product-name}/info" class="myclass" .. and so on... 我为参数product和product name添加了getter和setter方法。在记录日志时,我发现两个参数的set方法都被调用了两次(对于每个参数)。为什么会这样?在拦截器堆栈中,您可能已经声明了两次params拦截器 这可能是完全正确的 paramspreparamsstack是strut

我在
struts.xml
中使用过类似的内容:

action name="{product}/{product-name}/info"
class="myclass"
.. and so on...

我为参数
product
product name
添加了getter和setter方法。在记录日志时,我发现两个参数的set方法都被调用了两次(对于每个参数)。为什么会这样?

在拦截器堆栈中,您可能已经声明了两次
params
拦截器

这可能是完全正确的

paramspreparamsstack
struts default.xml
中可用的堆栈之一,在实现
模型驱动CRUD时非常有用:
第一个
params
拦截器设置模型的ID,然后
prepare
从数据库检索模型(或其他),然后第二个
params
拦截器设置模型的所有传入属性(假设您正在阅读
POST

从文件中:

当您希望将参数直接应用于要从外部加载的对象(如DAO、数据库或服务层),但在至少加载ID参数之前无法加载该对象时,这非常有用。通过加载两次参数,可以在prepare()方法中检索对象,从而允许第二个params拦截器将值应用于对象


每次设置参数时张贴stacktrace。