2013-12-19 49 views
0
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超類布爾型字段綁定不正確的值

Jdto 1.4版本的方式...

+0

您正在使用哪個版本的jDTO? –

回答

0

您遇到的行爲是約定優於配置方法的「副作用」。除非通過在XML文件上使用@DTOTransient註釋或transient配置將它們標記爲瞬態,否則將配置DTO上的所有字段。如果配置的字段在源bean上沒有相應的字段,它將被設置爲默認值,這就是您遇到此行爲的原因。

你有一些選項來解決這個問題:

  • @DTOTransient註釋添加到DTO。
  • 由於您無法修改DTO,因此可以通過XML進行配置。
  • 使用綁定生命週期來恢復該值。通過在子類上添加代碼。

您不妨在github上提交關於jDTO問題跟蹤器的錯誤報告。

+0

嗯,使場瞬變將導致它不綁定,當它從一個不同的源模型綁定,對吧?那麼我將不得不在這些情況下手動設置它。是不是「如果模型沒有getter,離開字段dto」更好的默認配置? – Reek

+0

@ user1186523也是有意義的,如果您願意的話,請在問題跟蹤器上提出問題,我們會分析它以便將來發布。 –