在我的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中有不同的表單字段類型有不同的規則。
有沒有人遇到過類似的問題?
請仔細閱讀[問] –