在我的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中有不同的表单字段类型有不同的规则。
有没有人遇到过类似的问题?
请仔细阅读[问] –