我有一个Spring控制器,其代码如下:
@RequestMapping("save")
public String save(@ModelAttribute @Valid Form form, BindingResult result){
if( result.hasErrors()){
[...]
我的表单包含一个hibernate对象列表。所有人都设置了他们的属性。我创建了一个编辑HTML表单,在控制器中我发现ManyToOne关系中的所有对象都丢失了。我只有身份证。我可以从数据库重新加载数据,但是@valid注释所带来的验证为时已晚。
public class Form{
@Valid
@NotNull
private List<Item> item;
@NotNull
private Foo foo;
[...]
和物品
@Entity
@Table(name = "item")
@XmlRootElement
public class Item{
@ManyToOne()
@JoinColumn(name = "dependent", referencedColumnName = "id", nullable = false)
@NotNull
private Dependent dependent;
@NotNull
private Currency currency;
如何在验证之前设置Dependent和Currency字段?有没有替代方法从数据库重新加载数据?
(免责声明一些名称已经改变以保护无辜者)
答案 0 :(得分:0)
如果您使用的是Spring-Data-JPA,可以register DomainClassConverter
为您完成此项工作。在另一种情况下,您可以自己编写这样的转换器。
答案 1 :(得分:0)
我找到了一种方法:
向控制器添加对SmartValidator的引用。
@Autowired私人SmartValidator验证器;
删除@valid注释。重新加载所有ManyToOne表并手动调用验证器。
@RequestMapping( “保存”) public String save(@ModelAttribute Form form,BindingResult result){
for(Item item:form.getItems()){
item.setDependant(myDAO.reload(item.getDependent()));
}
validator.validate(表单,结果);
if(result.hasErrors()){ [...]