为什么 struts 2 在动作类中调用 set() 方法两次



我在struts.xml中使用了这样的东西:

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

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

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

这可能是完全正确的。

paramsPrepareParamsStackstruts-default.xml中可用的堆栈之一,当您实现Model-Driven-CRUD时非常有用:第一个params拦截器设置模型的 ID,然后prepare从数据库中检索模型(或其他任何内容(,然后第二个params拦截器设置模型的所有传入属性(假设您正在读取POST(

从文档:

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

最新更新