【问题标题】:values in multiple tables spring validation prob多个表中的值弹簧验证问题
【发布时间】:2017-02-14 23:14:05
【问题描述】:

我在使用多个数据库表时遇到问题 我有什么:

输入:用户(表用户) 输入字段:Email(表用户) 输入:Bookingnumber(表格Bookingnumber)

仅使用“用户”表单的输入字段有效,从其他表添加 bookingnumber 会引发此错误:

Invalid target for Validator     [shuttleservice.form.validator.UserFormValidator@1588512]:   shuttleservice.form.model.Bookingnumber@18d7616

问题类似于 How insert values to multiple tables using spring and hibernate

Invalid target for Validator in spring error?

我只有两种形式 一个输出,仅显示 db 数据 一个输入,包含多个数据库表的字段

我应该使用多个验证器吗?

// show add user form
@RequestMapping(value = "/users/add", method = RequestMethod.GET)
public String showAddUserForm(Model model) {

    logger.debug("showAddUserForm()");

    User user = new User();
    Bookingnumber bookingnumber = new Bookingnumber();

    // set default value
    user.setName("setNewUserName");     
    user.setEmail("test123@gmail.com");

    bookingnumber.setBookingnumber("123.456");

    model.addAttribute("userForm", user);
    //model.addAttribute("bookingnumberForm", bookingnumber);
    model.addAttribute("userForm", bookingnumber);


    populateDefaultModel(model);
System.out.println("#8");
    return "users/userform";

}

【问题讨论】:

  • 也许可以解决。有两个验证器,每个用于每个 db 表,控制器中有两个 initBinder。但我不明白为什么我需要一个以上的验证器...它是一个 *.jsp,带有要检查的输入字段。这对我来说是代码膨胀,我以后会有 ~6 个表 -> 6 个验证器类 +1 个用于电子邮件表达式检查的验证器 + 更多用于其他动态内容

标签: java spring validation multiple-tables


【解决方案1】:

创建一个模型类来包装您的所有表单字段并将这个新包装器类的对象传递给您的表单。然后编写一个验证器类来验证字段。

private class FormModel {
    private User user;
    private BookingNumber bookingNumber;

    //Getter Setter ....
}

// show add user form
@RequestMapping(value = "/users/add", method = RequestMethod.GET)
public String showAddUserForm(Model model) {

    logger.debug("showAddUserForm()");
    FormModel formModel = new FormModel ();
    User user = new User();
    Bookingnumber bookingnumber = new Bookingnumber();

    // set default value
    user.setName("setNewUserName");     
    user.setEmail("test123@gmail.com");

    bookingnumber.setBookingnumber("123.456");
    formModel.setUser(user);
    formModel.setBookingNumber(bookingNumber);
    model.addAttribute("formModel", formModel);
    return "users/userform";
}

【讨论】:

  • 谢谢。我有@Override public String toString() { return "User [id=" + id + ", name=" + name + ", email=" + email + "]" + isNew(); } 和 ...return "Bookingnumber [bookingnumber=" + bookingnumber + "]" ;在其他模型和更多其他模型中如何在包装类中处理它?只是粘在一起?
  • public String toString() { return "FormModel[" + "user=" + user + ", bookingNumber=" + bookingNumber + ']'; }
猜你喜欢
  • 1970-01-01
  • 2014-11-06
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-22
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多