jdto superclass布尔字段绑定不正确的值

时间:2013-12-19 11:38:51

标签: jdto

public class Model {
}

public class SuperclassDTO {
    private boolean funny = true;

    public boolean isFunny() {
        return funny;
    }

    public boolean setFunny(boolean f) {
        this.funny = f;
    }
}

public class SubclassDTO extends SuperclassDTO {
}


new SubclassDTO().isFunny() //returns true
SubclassDTO dto =  binder.bindFromBusinessObject(SubclassDTO.class, new Model());
dto.isFunny(); //returns false!!!!

这不奇怪吗?模型类没有“有趣”字段,但不知何故dto与错误的值绑定。首先我认为jDTO需要“getFunny”约定,因此它无法读取值并将其设置为“false”,但将getter名称更改为“getFunny”并不能解决问题,而且我不允许修改SuperclassDTO。如何绑定正确的值?

顺便说一下Jdto 1.4版......

1 个答案:

答案 0 :(得分:0)

您遇到的行为是约定优于配置方法的“副作用”。除非您使用@DTOTransient注释或XML文件上的transient配置将它们标记为瞬态,否则将配置DTO上的所有字段。如果配置的字段在源bean上没有相应的字段,则它将使用默认值进行设置,这就是您遇到此行为的原因。

您可以选择一些方法来解决此问题:

  • @DTOTransient注释添加到DTO。
  • 由于您无法修改DTO,因此可以通过XML进行配置。
  • 使用Binding生命周期恢复该值。通过在子类上添加代码。

您还可以在github上提交有关jDTO问题跟踪器的错误报告。