Is it possible to select whole Java Object from Spring Form's drop down menu? I used LinkedHashMap, but it doesn't work.
I have relation Many To One between table Agent and table Roles (every Agent has one role eg. user, admin). I use hibernate so I have to operate on Object, not Id's from database. My problem is that I want to create drop down menu with list of all roles from my database and when I pick one element, this Object goes to my Agent Object and save in my database.
I have List with my Roles Objects
List<Roles> rolesList = rolesService.getAllRoles();
Which comes from this:
public List<Roles> getAllRoles() {
    return session().createQuery("from Roles").list();
}
and I tried something like this:
In my AgentController:
@RequestMapping("/createagent")
public String createAgent(Model model) {
    Agent agent = new Agent();
    List<Roles> rolesList = rolesService.getAllRoles();
    Map<Roles, String> rolesMap = new LinkedHashMap<Roles,String>();
    for (int i=0; i<rolesList.size(); i++){
        rolesMap.put(rolesList.get(i), rolesList.get(i).getRole());
    }
    model.addAttribute("rolesMap", rolesMap);
    model.addAttribute("agent", agent);
    return "createagent";
}
In my jsp file:
<tr><td>Roles:</td><td>
<sf:select path="roles" multiple="false">
<sf:options items="${rolesMap}"></sf:options>
</sf:select>
</td></tr> 
My Roles Object:
@Entity
@Table(name = "roles")
public class Roles {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "roles_seq_gen")
@SequenceGenerator(name = "roles_seq_gen", sequenceName = "roles_id_seq")
@Column(name = "id")
private long id;
@Column(name = "role")
private String role;
It shows excactly what I want but when I click position in my drop down menu and submit it, my form don't save my Object properly. It nested it ... I don't know how to subscribe this, maybe my toString() function output clear little bit.
Agent [id=0, username=TestUsername, password=TestPassword, roles=Roles[id=0, roles=Roles[id=0, roles=user]] ...
My Agent Object:
 @Entity
 @Table(name="agent")
 public class Agent {
    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="agent_seq_gen")
    @SequenceGenerator(name="agent_seq_gen", sequenceName="agent_id_seq")
    @Column(name="id")
    private long id;
    @Column(name="username")
    private String username;
    @Column(name="password")
    private String password;
    @ManyToOne
    @JoinColumn(name="roles_id")
    private Roles roles;
My jUnit test runs fine, it's something wrong with my Spring Form or with my controllers... I don't know.
 
                        
I would suggest to use
ModelAttributeand reference the form object to the said properties, like,agent.getRoles().createAgent(@ModelAttribute("agent") Agent agent)should work in what you're trying to accomplish.