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

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>
时间: 2024-11-13 07:52:37

Spring MVC 对@InitBinder数据绑定的使用的相关文章

spring mvc使用@InitBinder 标签对表单数据绑定

在SpringMVC中,bean中定义了Date,double等类型,如果没有做任何处理的话,日期以及double都无法绑定. 解决的办法就是使用spring mvc提供的@InitBinder标签 在我的项目中是在BaseController中增加方法initBinder,并使用注解@InitBinder标注,那么spring mvc在绑定表单之前,都会先注册这些编辑器,当然你如果不嫌麻烦,你也可以单独的写在你的每一个controller中.剩下的控制器都继承该类.spring自己提供了大量的

Spring MVC HTTP请求数据绑定

package com.springmvc.controller; import com.springmvc.model.UserInfo; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.stereotype.Controller; import org.springframework.uti

[Spring MVC] - InitBinder验证

Spring MVC使用InitBinder验证: 使用InitBinder做验证的情况一般会在此Controller中提交的数据需要有一些是业务性质的,也即比较复杂的验证情况下才会使用.大部份简单的表单验证,使用annotation验证即可以解决. Annotation验证使用方法可参见:http://www.cnblogs.com/HD/p/4123146.html 这里需要注意的一点:InitBinder和Annotation两种验证只能二选一,如果使用了InitBinder,就不能使用A

Spring MVC 学习笔记(二)

6. 视图和视图解析器  ?  Spring MVC如何解析视图 ? 请求处理方法执行完成后,最终返回一个ModelAndView对象.对于那些返回String,View或ModeMap等类型的处理方法,spring MVC 都会在内部将它们装配成一个ModelAndView对象,它包含了逻辑名和模型对象的视图 ? Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP也可是Excell. JFreeChart等各种表现形式的视图

Spring mvc数据转换 格式化 校验(转载)

原文地址:http://www.cnblogs.com/linyueshan/p/5908490.html 数据绑定流程 1. Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象2. DataBinder 调用装配在 Spring MVC 上下文中的 ConversionService 组件进行数据类型转换.数据格式化工作.将 Servlet 中的请求信息填充到入参对

Spring Mvc详解

一.spring mvc处理请求的流程. 客户端发出http请求,如果匹配到DispatcherServlet的请求映射路径,则web容器将请求转交给DispatcherServlet处理. DispatcherServlet接受到请求后,根据请求的信息和HandlerMapping的配置,找到处理请求的处理器(Handler).HandlerMapping类是路由控制器. 得到相对应的Handler后,通过HandlerAdapter对Handler进行封装,再以统一的适配器接口调用Handl

Spring MVC 如何防止XSS、SQL注入攻击

在Web项目中,关键词挖掘通常需求处置XSS,SQL写入进犯,处置这个疑问有两个号码大全思路: 在数据进入数据库之前对不合法字符进行转义,在更新和显现的时分将不合法字符复原 在显现的时分对不合法字符进行转义 假如项目还处在起步期间,主张运用第二种,直接运用jstl的标签即可处置不合法字符的疑问.当然,对于Javascript还需求自个处置一下,写一个办法,在解析从服务器端获取的数据时履行以下escapeHTML()即可. 附:Javascript办法: String.prototype.esca

Spring MVC中数据绑定之日期类型

数据绑定应该算是Spring MVC的特点之一吧~简单易用且功能强大,极大地简化了我们编程人员对于用户输入数据的接收及转换. 早先版本的Spring中的数据绑定完全都是基于PropertyEditor的.而Spring3中引入了Converter,用来替代PropertyEditor完成类型转换. 那么我们也依照这个顺序,先来讲讲基于传统的PropertyEditor来实现日期类型的数据绑定. 在Spring MVC中,我们可以通过WebDataBinder来注册自定义的PropertyEdit

spring mvc 数据绑定总结

spring mvc 做web开发时,经常会不知道如何合适绑定页面数据.用惯struts2的朋友更认为spring mvc 绑定数据不如struts2方便(本人最开始也是这么认为),经过一段时间的应用和测试,总结出以下几种情况,希望对刚接触spring mvc 的朋友有所帮助. 示例程序下载 查看spring源码可以看出spring支持转换的数据类型已经很多了. org.springframework.beans.PropertyEditorRegistrySupport.java [java]