2015-12-21 27 views
0

在我的Spring MVC/Thymeleaf應用程序中,當實例化任何模型實體的全新實例(我在AbstractModel中實現每個實體擴展時)時應用UUID。我用它,然後進行自定義等於沿所有實體將模型的子屬性設置爲null的規則是什麼?

@Column(name = "UUID", nullable = false, unique = true) 
    private String uuid = IdGenerator.createId(); 

傳播方法實現我一些其他的地方,我創建一個包含這種新創建實體的圖形的形式豆(簡單包裝)。

爲例包裝應該是這樣的:

WrapperObj obj = new Obj(new FooEntity(), new BarEntity()) 

兩個FooEntity和BarEntity有一定的Fileds喜歡整數,字符串等,它們最初未設置。唯一的fileld是UUID

然後我將包裝傳遞給最終填充空字段的表單。

當我提交表單並且實體未被修改時,它們仍然存在於包裝中。當我附加另一個對象時,沒有UUID的包裝器WrapperObj obj = new Obj(new FooEntity(), new BarEntity(), new TestObj())最初設置並提交表單而不更改它的字段,TestObj被重置爲空。

這是我對其他支持UUID的實體所需的行爲。

如何指示spring mvc框架在綁定時忽略UUID字段,以便在未修改時實體也變爲null?

感謝您的幫助!

CORRECTION

的TestObj對象沒有綁定到任何形式輸入字段。

UPDATE

我剛剛發現,這不是引起該問題的uuid。我包裝我有另一個子實體,讓我們說BoolFoo只有布爾字段(由AbstractEntity類設置id(int)和uuid(字符串)的一部分)。 這些字段是表單中的複選框類型。 當我在不修改任何BoolFoo的文件的情況下提交表單時,BoolFoo作爲一個整體被設置爲null(儘管在將對象傳遞給表單時存在id和uuid)。

但是,如果爲任何子實體提供至少一個文本字段(未針對其他類型進行檢查),則在從表單返回時,子對象(或任何實際的)永遠不會爲空。 我已經嘗試過binder.setDisallowedFields("uuid")方法以及binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));,但無論我做什麼,未修改的對象都不會設置爲null。

看起來在春季mvc中有不同的表單字段類型有不同的規則。

有沒有人遇到過類似的問題?

+0

請仔細閱讀[問] –

回答

0

DataBinder有兩個屬性,名爲allowedFieldsdisallowedFields,您可以定義要綁定或不綁定。只要使用與執行控制方法之前註釋@InitBinder

@InitBinder 
public void initBinder(WebDataBinder binder) { 
    binder.setDisallowedFields("uuid"); 
} 
+0

根據最新的API文檔: '註冊,不應該允許綁定字段。缺省值是none。將域標記爲不允許,以避免惡意用戶在綁定HTTP請求參數時進行不必要的修改。' 我實際上並沒有通過任何表單字段綁定uuid,它只是作爲包裝器中每個實體的一部分傳遞給表單。在更新中,我描述了我的最新觀察結果。 – mooor

相關問題