0

I have problems to use multiple database tables what I have:

Input:User (table User) Inputfeld:Email(table User) Input:Bookingnumber(table Bookingnumber)

using only inputfields form "user" works, adding bookingnumber from other table throws this error:

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

the problem is simmilar to How insert values to multiple tables using spring and hibernate

and Invalid target for Validator in spring error?

I have just two forms one output, shows just the db data one input with field for several db tables

should I use more than one validator?

// 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";

}
Community
  • 1
  • 1
w3Charlie
  • 85
  • 1
  • 3
  • 17
  • maybe solved. with two validators, each one for each db table and in controller two initBinder. but I do not understand why I need more than one validator... It is one *.jsp with inputfields to be checked. It's code bloat for me I would have ~6 Tables later -> 6 Validatorclasses +1 Validator for email expression check + more for other dynamic stuff – w3Charlie Feb 14 '17 at 14:37

1 Answers1

0

Create one model class to wrap all your form fields and pass object of this new wrapper class to your form. Then write a single validator class to validate the fields.

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";
}
Monzurul Shimul
  • 8,132
  • 2
  • 28
  • 42
  • thx. I have @Override public String toString() { return "User [id=" + id + ", name=" + name + ", email=" + email + "]" + isNew(); } and ...return "Bookingnumber [bookingnumber=" + bookingnumber + "]" ; in the other Model and more in other model how to handle it in a wrapper class? just glue together? – w3Charlie Feb 16 '17 at 10:11
  • public String toString() { return "FormModel[" + "user=" + user + ", bookingNumber=" + bookingNumber + ']'; } – Monzurul Shimul Feb 16 '17 at 10:19