java - Spring - How to get list of object in listbox jsp -


i don't understand why, when submit spring form in jsp file, can list of object role none filled (id,rolename). form allows create new user , user can have multiple roles.

here model user

@entity public class user implements serializable{ @id @generatedvalue(strategy=generationtype.auto) private int id; private string username; private string password; @manytomany(fetch = fetchtype.eager,cascade = cascadetype.all) @jointable(name="userandrole",         joincolumns=@joincolumn(name="user_id"),         inversejoincolumns=@joincolumn(name="role_id")) private list<role> roles; @enumerated(enumtype.string) private userstatus status; @manytoone @jointable(name="userandpartenaire", joincolumns=@joincolumn(name="user_id"), inversejoincolumns=@joincolumn(name="partenaire_id")) private partenaire partenaires; //......} 

here model role

@entity public class role { @id @generatedvalue(strategy=generationtype.auto) private int id; private string rolename; @manytomany(mappedby = "roles",fetch = fetchtype.eager) private list<user> users; //..... } 

here controler. first send user , list of role jsp

@requestmapping("/gestionadmin") public string setupform(map<string, object> map){     //system.out.println(fonction.hasrole("partenaire"));     user user = new  user();     user.setroles(new autopopulatinglist<role>(role.class));     list<user> userslist = userservice.getallusers();     hibernate.initialize(userslist);     map.put("user", user);     map.put("userslist",userslist );     map.put("roleslist", roleservice.getalltroles());     return "gestionadmin";  } 

jsp file

<form:form action="gestionadmin.do" method="post" commandname="user">     <table>         <tr>             <td>username</td>             <td><form:input path="username" /></td>         </tr>         <tr>             <td>password</td>             <td><form:input path="password" /></td>         </tr>         <tr>             <td>roles</td>             <td><form:select path="roles" multiple="true" items="${roleslist}" itemlabel="rolename">                 </form:select>             </td>         </tr>         <tr>             <td>status</td>             <td><form:select path="status">                <form:option value="active" label="active"/>                <form:option value="inactive" label="inactive"/>            </form:select> </td>         </tr>         <tr>             <td>                 <input type="submit" name="action" value="search" />                 <input type="submit" name="action" value="add" />                 <input type="submit" name="action" value="update" />             </td>         </tr>     </table> </form:form> 

and fonction can take form information. , here have error nullpointerexception because try id rolename of role in object user ( syso in loop)

@requestmapping(value="/gestionadmin.do",  method=requestmethod.post) public string setupformadmin(@modelattribute("user") @valid user user,bindingresult result,map<string, object> map,@requestparam string action){     system.out.println(fonction.hasrole("partenaire"));     user users = new  user();     user userstest = userservice.finduserbyname(user.getusername());     user userstestid = userservice.finduser(user.getid());     list<role> rolelist = new arraylist<role>();     string messages="";     //system.out.println("ooooo" + user.getpassword());     if( fonction.hasrole("admin")){         switch (action.tolowercase()) {         case "add":                          string mdp = user.getpassword();             user.setpassword(fonction.encode(mdp));             system.out.println(user.getroles().size()); // here size of getrole > 0              (role role : user.getroles()) {                 //rolelist.add(roleservice.findrole(1));                 system.out.println(role.getrolename() + " "+ role.getid()+"); // error nullpointerexcepction             }             user.setroles(rolelist);             if(userstest==null){                 userservice.adduser(user);             }else{                 messages="utilisateur déja présent dans la base de donné";             }             break; 

thanks (sorry english )

i find solution

in controller add @initbinder of role

@initbinder protected void initbinder(httpservletrequest request,         servletrequestdatabinder binder) throws exception {     // super.initbinder(request, binder);      binder.registercustomeditor(list.class, "roles",new customcollectioneditor(list.class){          @override         protected object convertelement(object element) {             role role = new role();             if (element != null && (element.tostring().equals("1") || element.tostring().equals("2") || element.tostring().equals("3") || element.tostring().equals("4"))) {                  role.setid(integer.parseint(element.tostring()));             }             return role;         }     }); } 

and in form add itemsvalue

<form:select path="roles" multiple="true" items="${roleslist}" itemlabel="rolename" itemvalue="id"> 

Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -