文档章节

Spring MVC 对@InitBinder数据绑定的使用

Vincent-Duan
 Vincent-Duan
发布于 2015/06/10 15:21
字数 1043
阅读 234
收藏 14
点赞 0
评论 0

Javabean

PlatformUser.java

@Entity
@Table(name = "dsm_USER")
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 Set<PlatformRole> roles = new HashSet<>();
@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 Set<PlatformRole> getRoles() {
return roles;
}
public void setRoles(Set<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() {
}
}

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 = new HashSet<>();
// 饥渴加载,在管理角色同时能够加载出相应的权限
@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;
}
}

User与Role是多对多的关系。

在更新某一个用户的同时,将用户的多个角色信息绑定到Checkbox上

Controller:

@InitBinder
public void initBinder(WebDataBinder binder) throws Exception {
binder.registerCustomEditor(Set.class, new PropertyEditorSupport() {
@Override
public void setAsText(String text) {
System.out.println(text);
// Long systemInfoId = Long.valueOf(text);
// SystemInfo systemInfo =
// systemInfoService.findById(systemInfoId);
String[] roles = text.split(",");
Set<PlatformRole> platformRoles = new HashSet<>();
PlatformRole platformRole = null;
for (int i = 0; i < roles.length; i++) {
platformRole = platformRoleService.findRoleById(Integer
.parseInt(roles[i]));
platformRoles.add(platformRole);
}
System.out.println(platformRole);
setValue(platformRoles);
}
});
}

/*********** updUser **************/
	@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);
		PlatformUser u = platformUserService.findUserById(user_id);
		Set<PlatformRole> us = u.getRoles();
		model.addAttribute(u);
		List<PlatformRole> r = platformRoleService.findAllRole();
		/*
		 * for(int i=0;i<r.size();i++){ if(r.get(i).getRole_id().equals(us.)) }
		 */
		Iterator<PlatformRole> it = us.iterator();
		while (it.hasNext()) {
			PlatformRole po = it.next();
			int itu = po.getRole_id();
			for (int i = 0; i < r.size(); i++) {
				if (r.get(i).getRole_id().equals(itu)) {
					r.set(i, po);
				}
			}
		}
		model.addAttribute("platformRole", r);

		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";
	}

在updateUser.jsp中:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>manage</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
<link rel="stylesheet" type="text/css" href="resources/bootstrap.css">
<script src="resources/jquery-1.7.1.js"></script>
<script src="resources/bootstrap.min.js"></script>
</head>
<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="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="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_name }" />
</c:forEach>
<form:checkboxes path="roles" items="${platformRole}"
itemValue="role_id" itemLabel="role_name" />
<c:forEach items="${platformRole }" var="r">
<form:checkbox path="roles" label="${r.role_name }" value="${r.role_id }" />
</c:forEach>
<form:checkboxes path="roles" items="${platformRole}"
itemValue="role_id" itemLabel="role_name" />
<c:forEach items="${platformRole}" var="role" varStatus="status">
<form:checkbox path="roles" value="${role}"
label="${role.role_name}" />
</c:forEach> --%>
<form:checkboxes path="roles" items="${platformRole}" itemValue="role_id"
 itemLabel="role_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>
</html>


© 著作权归作者所有

共有 人打赏支持
Vincent-Duan

Vincent-Duan

粉丝 9
博文 293
码字总数 98487
作品 0
海淀
SpringMvc 数据绑定400错误

今天请求一个SpringMvc 的时候,客户端总是报出: The request sent by the client was syntactically incorrect 网上都是说的是bean的名字和表单的名字不一样,但是我检查了N多遍之后,还是...

lifer
2014/05/13
0
0
spring mvc 统一异常处理

1、定义一个统一异常处理类 @ControllerAdvice,是spring3.2提供的新注解, 一般扫描context:component-scan扫描时也能扫描到,不需要在配置文件配置 但如果你的spring-mvc配置文件使用如下方...

qiun
2016/06/24
308
0
SpringMVC 基于注解的Controller @RequestMapping @Request

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能。现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller...

蓝狐乐队
2014/02/28
0
1
SpringMVC学习二:注解之注解详细解释

● @Controller ● @RequestMapping ● @RequestParam(将请求参数绑定到方法参数) ● @PathVariable(将 url template 里的参数绑定到方法参数) ● @RequestBody(将请求正文绑定到方法参数) ●...

sannywang
2016/12/14
11
0
springMVC将前台的String类型向Date、Double类型,否则报HTTPERRO400

使用@InitBinder注解 (1)需要自定义一个基础Controller,完成对日期转换的注册: (2)让其他业务控制层的Controller继承这个BaseController就OK了。 这样就实现了自动转换复杂类型的数据了...

zh151832
2016/03/08
43
0
Spring mvc 使用PropertyEditor进行数据转换

项目中遇到一个对timestamp 进行数据转换问题,spring mvc 提供了 initBinder的方法来处理这类型的问题,下面记录一下。 controller 注册转换的PropertyEditor: @Overrideprotected void init...

肥添
2013/05/25
0
0
spring mvc的表单类型转换(custom property editor)

spring mvc的表单类型转换太强大了,目前用到了两个简单的, 一个是将表单中的file自动映射成byte[],这样文件上传(如果使用blob)就无需写任何代码了。 另一个是将表单中的yyyy-MM-dd格式映...

cyper
2012/10/28
0
2
Spring4.1.6 常用注解

常用的spring注解有如下几种: @Controller @Service @Autowired @RequestMapping @RequestParam @ModelAttribute @Cacheable @CacheFlush @Resource @PostConstruct @PreDestroy @Repositor......

大糊涂
2015/06/10
0
0
SpringMVC基于注解的Controller

本文将介绍 Spring 2.5 新增的 Sping MVC 注解功能,讲述如何使用注解配置替换传统的基于 XML 的 Spring MVC 配置。 一个简单的基于注解的 Controller 使用过低版本 Spring MVC 的读者都知道...

黎嘉诚
2016/08/21
29
0
Spring MVC 中的基于注解的 Controller

Spring MVC 中的基于注解的 Controller @Controller基于注解的 Controller 终于来到了基于注解的 Spring MVC 了。之前我们所讲到的 handler,需要根据 url 并通过 HandlerMapping 来映射出相...

扁-哥
2013/05/06
0
6

没有更多内容

加载失败,请刷新页面

加载更多

下一页

打印斐波那契数

package com.jerry.ch04;public class PrintFibonacci {public static void main(String[] args) {for (int i=0; i<10; i++) {System.out.print(fib(i) + " ");}......

JerryNing
4分钟前
0
0
shell编程

一、shell脚本介绍

人在艹木中
5分钟前
0
0
istio 0.8 遥测 案例

==============遥测===================================== 演示如何从网格中收集遥测信息。 分布式跟踪。如何配置代理以向Zipkin或Jaeger发送跟踪请求 收集度量标准和日志。此任务说明如何配...

xiaomin0322
7分钟前
0
0
ND4J求多元线性回归以及GPU和CPU计算性能对比

上一篇博客《梯度下降法求多元线性回归及Java实现》简单了介绍了梯度下降法,并用Java实现了一个梯度下降法求回归的例子。本篇博客,尝试用dl4j的张量运算库nd4j来实现梯度下降法求多元线性回...

冷血狂魔
8分钟前
0
0
springboot常用注解

@SpringBootApplication: 包含@Configuration、@EnableAutoConfiguration、@ComponentScan 通常用在主类上。 @Service: 用于标注业务层组件。 @RestController: 用于标注控制层组件(如strut...

GoldenVein
14分钟前
1
0
如何进行大数据的入门级学习?

不知道你是计算机专业应届生还是已经从业者。总之,有java基础的学生学习大数据会轻松很多,零基础的小白都需要从java和linux学起。 如果你是一个学习能力特别强,而且自律性也很强的人的话可...

董黎明
28分钟前
0
0
使用Parcelable传递复杂参数

最近做AIDL传递对象,对象必须实现Parcelable的方法才可以被传递。 @Override    public int describeContents() {//这个 默认返回0就行了。        return 0;    }    ...

火云
29分钟前
0
0
十大Intellij IDEA快捷键

Intellij IDEA中有很多快捷键让人爱不释手,stackoverflow上也有一些有趣的讨论。每个人都有自己的最爱,想排出个理想的榜单还真是困难。以前也整理过Intellij的快捷键,这次就按照我日常开发...

HJCui
39分钟前
0
0
word 使用mathtype 编写 数学公式

下载安装,这个链接命名。。。。 http://www.mathtype.cn/xiazai.html 安装之后会多出一个选项 使用内联方式插入图表 编写公式的界面 设置支持latex 语法 输入公式回车就可以看到结果...

阿豪boy
57分钟前
0
0
Promise

定义 Promise是异步编程的一种解决方案,所谓Promise就是一个容器,里面保存着某个未来才会结束的事件(通常是一个一步操作)的结果。 特点: 2.1 对象的状态不受外界影响,三种状态pending...

litCabbage
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部