SpringMVC Checkbox 对List<object> 数据绑定

在SpringMVC中不得不用到强大的数据绑定

MODEL:

PlatFormRole.java

@Entity
@Table(name = "dsm_ROLE")
public class PlatformRole extends DsmObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Integer role_id;
@Column
private String role_name;
@Column
private Integer role_class;
@ManyToMany(mappedBy = "roles",fetch = FetchType.EAGER)
private Set<PlatformUser> users;
// 饥渴加载,在管理角色同时能够加载出相应的权限
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "dms_role_pri", joinColumns = { @JoinColumn(name = "rid") }, inverseJoinColumns = { @JoinColumn(name = "pid") })
private Set<PlatformPrivilege> pris;
public Integer getRole_id() {
return role_id;
}
public void setRole_id(Integer role_id) {
this.role_id = role_id;
}
public String getRole_name() {
return role_name;
}
public void setRole_name(String role_name) {
this.role_name = role_name;
}
public Integer getRole_class() {
return role_class;
}
public void setRole_class(Integer role_class) {
this.role_class = role_class;
}
public PlatformRole(Integer role_id, String role_name, Integer role_class) {
super();
this.role_id = role_id;
this.role_name = role_name;
this.role_class = role_class;
}
public PlatformRole() {
}
public Set<PlatformUser> getUsers() {
return users;
}
public void setUsers(Set<PlatformUser> users) {
this.users = users;
}
public Set<PlatformPrivilege> getPris() {
return pris;
}
public void setPris(Set<PlatformPrivilege> pris) {
this.pris = pris;
}
}

PlatformUser.java

public class PlatformUser extends DsmObject {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column
private Integer userid;
@Column
private String username;
@Column
private String password;
@Column
private String work_id;
@ManyToOne(cascade = CascadeType.MERGE, fetch = FetchType.EAGER)
@JoinColumn(name = "org_id")
private PlatformOrganization org_id;
// 饥渴加载,在加载用户信息同时加载角色信息
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = "dsm_user_role", joinColumns = { @JoinColumn(name = "userid") }, inverseJoinColumns = { @JoinColumn(name = "rid") })
private List<PlatformRole> roles;
@Column
private String telephone;
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public List<PlatformRole> getRoles() {
return roles;
}
public void setRoles(List<PlatformRole> roles) {
this.roles = roles;
}
public String getWork_id() {
return work_id;
}
public void setWork_id(String work_id) {
this.work_id = work_id;
}
public PlatformOrganization getOrg_id() {
return org_id;
}
public void setOrg_id(PlatformOrganization org_id) {
this.org_id = org_id;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public PlatformUser() {
}
}

可以看到,在PlatformUser中有一个角色属性,与用户的关系是一对多的

private List<PlatformRole> roles;

那么在修改某个用户的时候如何绑定当前用户的多个角色?

在Controller中:

@RequestMapping(value = "/{user_id}/update", method = RequestMethod.GET)
public String update(@PathVariable int user_id, Model model) {
model.addAttribute("platformOrganization",
platformOrgService.findAllOrg());
model.addAttribute("user_id", user_id);
List<PlatformRole> r = platformRoleService.findAllRole();
model.addAttribute("platformRole",r);
model.addAttribute(platformUserService.findUserById(user_id));
return "/platform/updUser";
}
@RequestMapping(value = "/{user_id}/update", method = RequestMethod.POST)
public String update(@PathVariable int user_id, PlatformUser user) {
platformUserService.updateUser(user);
return "redirect:/platformIndex/users";
}

这是最常见的写法。

在View中:

<body>
<div class="container">
<div class="row">
<div class=" col-md-12">
<div class="page-header">
<h2>用户修改</h2>
</div>
</div>
</div>
</div>
<form:form action="platformIndex/${user_id}/update" method="post"
modelAttribute="platformUser" class="form-horizontal" role="form">
<div class="form-group">
<label for="userid" class="col-md-2 control-label">用户id</label>
<div class="col-md-6">
<form:input class="form-control" path="userid" placeholder="userid" />
</div>
</div>
<div class="form-group">
<label for="username" class="col-md-2 control-label">用户名</label>
<div class="col-md-6">
<form:input class="form-control" path="username"
placeholder="username" />
</div>
</div>
<div class="form-group">
<label for="password" class="col-md-2 control-label">密码</label>
<div class="col-md-6">
<form:input class="form-control" path="password"
placeholder="password" />
</div>
</div>
<div class="form-group">
<label for="role" class="col-md-2 control-label">角色</label>
<div class="col-md-3">
<%-- <form:select path="role_id" class="form-control">
<form:option value="-" label="请选择" />
<form:options items="${platformRole}" itemValue="role_id"
itemLabel="role_name" />
</form:select> --%>
<%-- <form:select class="form-control" path="role_id.role_id" items="${platformRole}"
itemValue="role_id" itemLabel="role_name" /> --%>
<%-- <form:checkboxes path="roles" items="${platformRole}"
itemValue="role_id" itemLabel="role_name" /> --%>
<c:forEach items="${platformRole}" var="r" begin="0"
varStatus="status">
<form:checkbox path="roles[${status.index }].role_id"  value="${r.role_id }" label="${r.role_id }" />
</c:forEach>
</div>
</div>
<div class="form-group">
<label for="workID" class="col-md-2 control-label">工号</label>
<div class="col-md-6">
<form:input class="form-control" path="work_id" placeholder="workID" />
</div>
</div>
<div class="form-group">
<label for="organization" class="col-md-2 control-label">部门</label>
<div class="col-md-3">
<form:select class="form-control" path="org_id.org_id"
items="${platformOrganization}" itemValue="org_id"
itemLabel="org_name" />
</div>
</div>
<div class="form-group">
<label for="telephone" class="col-md-2 control-label">联系方式</label>
<div class="col-md-6">
<form:input class="form-control" path="telephone"
placeholder="telephone" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">修改</button>
<button type="reset" class="btn btn-default">重置</button>
</div>
</div>
</form:form>
</body>

注意到角色的绑定:

<c:forEach items="${platformRole}" var="r" begin="0"
varStatus="status">
<form:checkbox path="roles[${status.index }].role_id"  value="${r.role_id }" label="${r.role_id }" />
</c:forEach>

通过这种方式可以讲User Model中的List<Role> roles;取出来

时间: 2024-10-14 21:01:06

SpringMVC Checkbox 对List<object> 数据绑定的相关文章

SpringMVC源码阅读:属性编辑器、数据绑定

1.前言 SpringMVC是目前J2EE平台的主流Web框架,不熟悉的园友可以看SpringMVC源码阅读入门,它交代了SpringMVC的基础知识和源码阅读的技巧 本文将通过源码(基于Spring4.3.7)分析,弄清楚SpringMVC如何通过类型转换完成数据绑定和属性编辑器的原理,并自定义属性编辑器 2.源码分析 进入RequestMappingHandlerAdapter,该类支持参数解析和数据返回,进入invokeHandlerMethod方法 794行构造WebDataBinder

SpringMVC框架整理(二)

SpringMVC框架整理第二发,数据绑定流程,数据校验(错误信息国际化),拦截器,异常处理. 数据绑定流程(数据转换,数据格式化,数据校验) 1. Spring MVC 主框架将 ServletRequest  对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet

Springmvc集成Shiro实现权限管理

Shiro是一个安全框架,他可以集成其他开发开发框架 如:Springmvc,实现用户身份认证.权限管理等等功能,shiro详细的介绍也就不讲了,这里给出一些关键的知识点吧: 知识点: shiro中默认的过滤器 过滤器名称 过滤器类 描述 anon org.apache.shiro.web.filter.authc.AnonymousFilter 匿名过滤器 authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter 如果继续

Vue1.0用法详解

Vue.js 不支持 IE8 及其以下版本,因为 Vue.js 使用了 IE8 不能实现的 ECMAScript 5 特性. 开发环境部署 可参考使用 vue+webpack. 基本用法 1 2 3 4 5 6 7 8 9 10 11 <div id="app"> {{message}} <input v-model="message"> </div> new Vue({ ele: '#app', data: { message:

DIDAO.Common --- 项目中的常用类及其中函数

常用函数: CommonHelper.cs using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Web; using RazorEngine; using RazorEngine.Text

eclipse使用git提交项目

准备工作: 目的:eclipse使用Git提交本地项目,提交至远程github上 eclipse版本:eclipse4.5  64位 jdk版本:jdk-1.7 64位 项目类型:maven web项目 备注:eclipse高版本自带git插件,而低版本则需自己安装git插件,这里使用eclipse高版本,低版本安装git插件这里不进行介绍. eclipse使用git提交项目有2种方式:一种是git命令窗口,另一种是eclipse自带git插件(跟svn插件一样使用) 一.使用git命令窗口提交

java-captcha实现验证码(二)

captcha实现验证码验证用户登录,防止密码被暴力破解. 下面是在Springmvc框架中运行. 导入的jar包: kaptcha-2.3.2.jar 下载地址:http://download.csdn.net/detail/u013147600/9052871 或是在maven ---pom.xml:配置如下 <!-- 验证码工具 --> <dependency> <groupId>com.google.code</groupId> <artifa

Concurrent.Thread.js

(function(){ if ( !this.Data || (typeof this.Data != 'object' && typeof this.Data != 'function') ) this.Data = new Object(); if ( this.Data.Stack === undefined ) this.Data.Stack = undefined; with ( function(){ with ( Data ) { return function () {

SpringMVC数据绑定全面示例(复杂对象,数组等)

点击链接查询原文 http://www.xdemo.org/springmvc-data-bind/ 已经使用SpringMVC开发了几个项目,平时也有不少朋友问我数据怎么传输,怎么绑定之类的话题,今天做一个总结.在此之前,大家可以看一下我之前的一篇关于Spring restful的文章http://www.xdemo.org/spring-restful/. 项目下载:http://pan.baidu.com/share/link?shareid=955245807&uk=1896630845