Problems with WebDataBinder and Set.Class

Discussion in 'Java' started by stunaz, Apr 21, 2011.

  1. stunaz

    stunaz Guest

    Hello everyone, i am having trouble with binding my data from a form :
    I have two class

    @Entity
    @Table(name = "ROLES")
    public class Role implements GenericDomain {

    private Long id;
    private String code;
    private String name;

    private Set<Privilege> privileges = new HashSet<Privilege>(0);

    public Role() {}

    /* getter and setter*/

    @ManyToMany(cascade=CascadeType.ALL)
    @JoinTable(name = "ROLES_PRIVILEGES"
    , joinColumns = { @JoinColumn(name = "ROLE_ID") }
    , inverseJoinColumns = { @JoinColumn(name = "PRIVILEGE_ID") }
    )

    public Set<Privilege> getPrivileges() {
    return this.privileges;
    }
    public void setPrivileges(Set<Privilege> privileges) {
    this.privileges = privileges;
    }
    /* overide of hascode, equals*/
    }
    And

    @Entity
    @Table(name = "PRIVILEGES")
    public class Privilege implements GenericDomain {

    private Long id;
    private String code;

    private Set<Role> roles = new HashSet<Role>(0);

    public Privilege() {}

    /* getter and setter*/

    @ManyToMany(cascade=CascadeType.REFRESH, mappedBy="privileges")
    public Set<Role> getRoles() {
    return this.roles;
    }
    public void setRoles(Set<Role> roles) {
    this.roles = roles;
    }
    @Override
    public String toString(){
    return this.getCode() + this.getComment();
    }

    /*overide equals and hascode*/
    and in my controller i have :

    @InitBinder
    public void initBinder(WebDataBinder binder) {

    binder.registerCustomEditor(Set.class, "privileges", new
    CustomCollectionEditor(Set.class) {
    @Override
    protected Object convertElement(Object element) {
    return (element == null)?
    null:privilegeService.getOne(Integer.parseInt((String)element));
    }
    });
    }
    @RequestMapping(value = "edit", method = RequestMethod.POST)
    public String saveOldRole( @ModelAttribute("role") Role role
    , BindingResult result
    , ModelMap model
    ) {

    validator.validate(role, result);
    if (result.hasErrors()){
    logger.error(result.getAllErrors());
    model.addAllAttributes(result.getModel());
    return "/admin/role/edit";
    }
    logger.info(role.getPrivileges());
    Iterator p = role.getPrivileges().iterator();
    while(p.hasNext()){
    logger.info(p.next().getClass());
    }
    roleService.saveOrUpdate(role);
    model.addAttribute("roles", roleService.getAll());
    sessionStatus.setComplete();
    return "redirect:/admin/role/list.do";
    }
    and my debug is

    role.RoleController:93 - [[MANAGE_USERS], [MANAGE_ROLES]]
    role.RoleController:96 - class java.util.LinkedHashSet
    role.RoleController:96 - class java.util.LinkedHashSet
    22:29:44,915 ERROR tomcat-http--7 property.BasicPropertyAccessor:194 -
    IllegalArgumentException in class: com.stunaz.domain.Privilege, getter
    method of property: id
    I dont understand why at 96, the class type is
    java.util.LinkedHashSet, i thought it should be Privileges. I dont
    understand why my role.getPrivileges() is a Set of Set, it should be a
    Set of Privilege.

    Of course at saveOrUpdate am getting an error.
    stunaz, Apr 21, 2011
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. keith edward
    Replies:
    1
    Views:
    391
    John C. Bollinger
    Apr 8, 2004
  2. E11
    Replies:
    1
    Views:
    4,736
    Thomas Weidenfeller
    Oct 12, 2005
  3. jd
    Replies:
    3
    Views:
    349
  4. christopher diggins
    Replies:
    16
    Views:
    745
    Pete Becker
    May 4, 2005
  5. Joseph Turian
    Replies:
    5
    Views:
    585
Loading...

Share This Page