是否可以从Spring Form的下拉菜单中选择整个Java Object?我使用了LinkedHashMap,但它不起作用。
我在表代理和表角色之间存在多对一关系(每个代理都有一个角色,例如用户,管理员)。我使用hibernate所以我必须操作Object,而不是数据库中的Id。我的问题是我想创建下拉菜单,其中包含我数据库中所有角色的列表,当我选择一个元素时,此Object将转到我的代理对象并保存在我的数据库中。
我有我的角色对象列表
List<Roles> rolesList = rolesService.getAllRoles();
由此产生:
public List<Roles> getAllRoles() {
return session().createQuery("from Roles").list();
}
我试过这样的事情:
在我的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";
}
在我的jsp文件中:
<tr><td>Roles:</td><td>
<sf:select path="roles" multiple="false">
<sf:options items="${rolesMap}"></sf:options>
</sf:select>
</td></tr>
我的角色对象:
@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;
它显示了我想要的东西但是当我在下拉菜单中单击位置并提交它时,我的表单不能正确保存我的对象。它嵌套了......我不知道如何订阅它,也许我的toString()函数输出清楚一点。
Agent [id=0, username=TestUsername, password=TestPassword, roles=Roles[id=0, roles=Roles[id=0, roles=user]] ...
我的代理对象:
@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;
我的jUnit测试运行正常,我的Spring Form或控制器出了问题......我不知道。
答案 0 :(得分:0)
我建议使用ModelAttribute
并将表单对象引用到所述属性,例如agent.getRoles()
。
createAgent(@ModelAttribute("agent") Agent agent)
应该适用于您要完成的任务。