我有一个场景,我需要更新一个用户可以拥有m个角色的用户角色。
@Entity
public class User{
private String name;
private String login;
private String password;
@OneToMany
private Role role;
}
假设我有一个User对象列表,其中的角色与每个用户相关联。现在我必须在UI中显示这些数据。例如,如下所示,
User Name Roles
A (ckbox_selected)Admin (ckbox)Viewer (ckbox)Reporter
B (ckbox)Admin (ckbox)Viewer (ckbox_selected)Reporter
用户A目前拥有管理员权限,现在我们也添加了查看器。那么在视图和服务层如何实现这种场景呢? dao将返回用户列表。 或者是否有其他简单的方法设计并实现这种情况?
如果没有,可以解释使用Spring MVC上下文或任何其他框架。 View可以是带弹簧标签的jsp,也可以是Apache Velocity等其他模板视图。模型使用hibernate与数据库进行映射。
答案 0 :(得分:1)
它应该像这样
实体
<form:form comandName="user" method="post">
<form:checkboxes path="roles" items="${roles}" itemLabel="name" itemValue="id"/>
</form:form>
带有spring mvc标记的JSP
@RequestMapping(method = RequestMethod.POST)
public String add(@ModelAttribute("user") User user, BindingResult result) {
validator.validate(user, result);
if (result.hasErrors())
return "/user";
userDao.update(user);
return "redirect:/users";
}
@InitBinder
public void initBinder(ServletRequestDataBinder binder) {
binder.registerCustomEditor(List.class, "roles", new CustomCollectionEditor(List.class) {
protected Object convertElement(Object element) {
if (element != null) {
Integer roleId = Integer.parseInt(element.toString());
Role role = (Role) roleDao.getById(roleId);
return role;
}
return null;
}
});
}
Spring控制器
<script>
$(document).ready(function(){
$("#burger").click(function(){
$("#menu").slideToggle();
});
});
</script>
<!-- END OF SCRIPTS -->
<!-- HEADER -->
<header>
<div id="top">
<a href="#" id="logo"><img src="root/logo.png"></a>
<div id="burger">
<a>Menu</a>
</div>
</div>
<nav id="navbar">
<ul id="menu">
<li><a href="#">Option 1</a></li>
<li><a href="#">Option 2</a></li>
<li><a href="#">Option 3</a></li>
<li><a href="#">Option 4</a></li>
<li><a href="#">Option 5</a></li>
</ul>
</nav>
</header>
<!-- END HEADER -->
</body>
</head>