最近没事自己在用ExtJs4.2+Spring mvc做一个CRM的系统,在其中的管理用户的时候需要显示数据库中的Blob的头像。但是在网上找了很久有没有找到完整的例子,只是一些零零碎碎的知识(也许是我没有找到,嘿嘿)。后来自己整理好了完整的代码,在此给需要的朋友一些帮助!一下是测试后的效果:
以下是ExtJs的代码:
-
Ext.onReady(function(){
-
//初始化提示信息
-
Ext.QuickTips.init();
-
//启动加载器
-
Ext.Loader.setConfig({
-
enabled:true
-
});
-
//1 建立数据模型
-
Ext.define('UserModel' , {
-
extend:'Ext.data.Model' ,
-
fields:[ //uuid
-
{name:'id' , type:'string'},
-
{name:'username' , type:'string'},
-
{name:'password' , type:'string'}
-
]
-
});
-
//2 建立数据集合
-
Ext.define('UserStore' , {
-
extend:'Ext.data.Store' ,
-
model:'UserModel' ,
-
currentPage:1 ,
-
pageSize:5 ,
-
proxy:{
-
type:'ajax' ,
-
url:'/Ext/ext/user/findAll.json' , //后台的springmvc访问地址 返回json格式的数据
-
reader:{
-
type:'json' , //指定返回的数据格式
-
root: 'object', //真正的数据节点 如:{A:'a',B:'b':C:'c',root:[{A1:'a1'},{B1:'b1'}],count:10} 其中root就为数据区 其他的为自定义或是ExtJS需要的信息
-
totalProperty:'count' //计数的标志
-
}
-
} ,
-
autoLoad: true //自动加载
-
});
-
-
//3:表格组件 Ext.grid.Panel
-
Ext.define('UserGrid',{
-
id:'usergrid' ,
-
extend:'Ext.grid.Panel' ,
-
title:'用户列表' ,
-
width:'100%' ,
-
height:'100%' ,
-
//icon:'js/icons/table/table.png' ,
-
renderTo:Ext.getBody() ,
-
forceFit:true ,
-
selType:'checkboxmodel' , //复选框的模式
-
multiSelect:true , //多选模式
-
//columns store
-
columns:[
-
{text:'序号' , width:50 , xtype:'rownumberer' ,align:'center'},
-
{text:'用户名' ,dataIndex:'username' , align:'center' , width:80 , sortable:true },
-
{text:'密码' ,dataIndex:'password' , align:'center' , width:80 , sortable:true },
-
{text:'头像' , align:'center' , width:80 ,
-
renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){ //要显示blob数据的图像 这里是重点
-
var disp = ""; //有关renderer更详细的使用请查看相关文档
-
disp = "+record.get('id')+" width=15 height=15 />"; //其中的src后的地址为后台获取图片的地址
-
return disp;
-
}}
-
-
] ,
-
dockedItems: [{
-
xtype: 'pagingtoolbar',
-
dock: 'bottom',
-
displayInfo: true
-
}],
-
//初始化组件的方法
-
initComponent:function(){
-
var me = this ;
-
var UserStore = Ext.create('UserStore');
-
//UserStore.load(); //手动加载
-
me.store = UserStore;
-
me.dockedItems[0].store = UserStore;
-
me.callParent(arguments);
-
}
-
});
-
var d = Ext.create('UserGrid');
-
});
在使用的时候只需引入该文件和ExtJs的必要文件就可以了。
需要引入的文件有:ext-all.css,ext-all.js,ext-lang-zh_CN.js,和以上的js代码文件
以下是后台的JAVA代码:UserController
-
package com.yiwen.ext.controller;
-
-
import java.io.InputStream;
-
import java.io.OutputStream;
-
import java.sql.Blob;
-
-
import javax.annotation.Resource;
-
import javax.servlet.http.HttpServletRequest;
-
import javax.servlet.http.HttpServletResponse;
-
-
import org.hibernate.Hibernate;
-
import org.springframework.stereotype.Controller;
-
import org.springframework.web.bind.annotation.RequestMapping;
-
import org.springframework.web.bind.annotation.ResponseBody;
-
-
import com.yiwen.ext.dto.DataTransful;
-
import com.yiwen.ext.service.UserService;
-
import com.yiwen.ext.util.HibUtil;
-
import com.yiwen.ext.vo.User;
-
-
@Controller
-
@RequestMapping("/ext/user")
-
public class UserController {
-
-
private UserService userService;
-
-
public UserService getUserService() {
-
return userService;
-
}
-
-
@Resource
-
public void setUserService(UserService userService) {
-
this.userService = userService;
-
}
-
@RequestMapping("/login.json")
-
@ResponseBody
-
public DataTransful login(User user) throws Exception{
-
System.out.println(user.getUsername());
-
return userService.login(user);
-
}
-
/**
-
* 查看用户
-
* @param request
-
* @param response
-
* @return
-
* @throws Exception
-
*/
-
@RequestMapping("/findAll.json")
-
@ResponseBody
-
public DataTransful findAll(HttpServletRequest request,HttpServletResponse response) throws Exception{
-
String page = request.getParameter("page"); //获取ExtJS传到后台的分页参数
-
String size = request.getParameter("limit");
-
String start = request.getParameter("start");
-
Integer pageNum = (page=="" || page==null)?1:Integer.parseInt(page);
-
Integer pageSize = (size=="" || size==null)?5:Integer.parseInt(size);
-
Integer pageStart = (start=="" || start==null)?1:Integer.parseInt(start);
-
DataTransful dt = new DataTransful(); //此为自定义的数据传输对象
-
dt.setPageStart(pageStart);
-
dt.setPageNum(pageNum);
-
dt.setPageSize(pageSize);
-
return userService.findAll(dt);
-
}
-
/**
-
* 添加用户
-
* @param user
-
* @return
-
* @throws Exception
-
*/
-
@RequestMapping("/addUser.json")
-
@ResponseBody
-
public DataTransful addUser(User user) throws Exception{
-
System.out.println(user.getImgs()==null);
-
Blob blob = Hibernate.getLobCreator(HibUtil.getSession()).createBlob(user.getImgs().getInputStream(),16777218);
-
user.setPhoto(blob);
-
return userService.add(user);
-
}
-
/**
-
* 显示blob数据的输出流
-
* @param request
-
* @param response
-
* @throws Exception
-
*/
-
@RequestMapping("/showPic.do")
-
public void showPic(HttpServletRequest request,HttpServletResponse response)throws Exception{
-
OutputStream out = response.getOutputStream();
-
String tid = request.getParameter("id"); //根据用户的id去数据库查找想要的Blob数据字段并返回数据
-
Integer id = (tid==null || tid=="")?null:Integer.parseInt(tid);
-
if(id!=null){
-
InputStream inputStream =userService.getImg(id);
-
byte[] b = new byte[4096];
-
int n = 0;
-
while((n=inputStream.read(b))!=-1){
-
out.write(b, 0, n); //将数据已流的形式写出
-
}
-
out.flush();
-
out.close();
-
}
-
}
-
}
以下是我自定义的数据传输对象:DataTransful
-
package com.yiwen.ext.dto;
-
-
public class DataTransful {
-
-
private Boolean success = false; //ExtJs中执行proxy方法是需要的标志位
-
private Boolean logStat = false; //账号的登录状态
-
private Boolean lockStat = false; //账号登录后的锁定状态
-
private Integer pageNum; //当前页号
-
private Integer pageSize; //每页显示的数据条数
-
private Integer PageStart; //每页的起始数
-
private Object object; //数据存储对象
-
private Long count; //数据的记录总数
-
private String msg = ""; //系统提示信息
-
public Integer getPageNum() {
-
return pageNum;
-
}
-
public void setPageNum(Integer pageNum) {
-
this.pageNum = pageNum;
-
}
-
public Integer getPageSize() {
-
return pageSize;
-
}
-
public void setPageSize(Integer pageSize) {
-
this.pageSize = pageSize;
-
}
-
public Integer getPageStart() {
-
return PageStart;
-
}
-
public void setPageStart(Integer pageStart) {
-
PageStart = pageStart;
-
}
-
public Object getObject() {
-
return object;
-
}
-
public void setObject(Object object) {
-
this.object = object;
-
}
-
public Long getCount() {
-
return count;
-
}
-
public void setCount(Long count) {
-
this.count = count;
-
}
-
public Boolean getLogStat() {
-
return logStat;
-
}
-
public void setLogStat(Boolean logStat) {
-
this.logStat = logStat;
-
}
-
public Boolean getLockStat() {
-
return lockStat;
-
}
-
public void setLockStat(Boolean lockStat) {
-
this.lockStat = lockStat;
-
}
-
public String getMsg() {
-
return msg;
-
}
-
public void setMsg(String msg) {
-
this.msg = msg;
-
}
-
public Boolean getSuccess() {
-
return success;
-
}
-
public void setSuccess(Boolean success) {
-
this.success = success;
-
}
-
}
以下是我的User对象:
-
package com.yiwen.ext.vo;
-
-
import java.io.Serializable;
-
import java.sql.Blob;
-
import java.util.HashSet;
-
import java.util.Set;
-
-
import javax.persistence.Basic;
-
import javax.persistence.Column;
-
import javax.persistence.Entity;
-
import javax.persistence.FetchType;
-
import javax.persistence.GeneratedValue;
-
import javax.persistence.Id;
-
import javax.persistence.Lob;
-
import javax.persistence.OneToMany;
-
import javax.persistence.Table;
-
import javax.persistence.Transient;
-
-
import org.hibernate.annotations.Cascade;
-
import org.hibernate.annotations.CascadeType;
-
import org.springframework.web.multipart.commons.CommonsMultipartFile;
-
-
import com.fasterxml.jackson.annotation.JsonIgnore;
-
-
-
@Entity
-
@Table(name="t_user")
-
public class User implements Serializable{
-
@Id
-
@GeneratedValue
-
private Integer id;
-
private String username;
-
private String password;
-
@Transient
-
@JsonIgnore //ExtJS+Sprin mvc上传文件是默认是CommonsMultipartFile以上两个注解是不让改字段映射到数据库
-
private CommonsMultipartFile imgs; //并且不让其转换成json数据格式(不让会报错),在我的例子中 它只是一个中转
-
@Lob
-
@Basic(fetch=FetchType.EAGER)
-
@Column(columnDefinition="longBlob") //存储到数据库的Blob字段,不让转换成Json数据,单独处理
-
@JsonIgnore
-
private Blob photo;
-
/* @JsonIgnore
-
@OneToMany(mappedBy="user")
-
@Cascade(CascadeType.ALL)
-
private Set roleUsers = new HashSet();*/
-
private Integer falg;
-
-
/* public Set getRoleUsers() {
-
return roleUsers;
-
}
-
public void setRoleUsers(Set roleUsers) {
-
this.roleUsers = roleUsers;
-
}*/
-
public Integer getFalg() {
-
return falg;
-
}
-
public void setFalg(Integer falg) {
-
this.falg = falg;
-
}
-
public Integer getId() {
-
return id;
-
}
-
public void setId(Integer id) {
-
this.id = id;
-
}
-
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 Blob getPhoto() {
-
return photo;
-
}
-
public void setPhoto(Blob photo) {
-
this.photo = photo;
-
}
-
public CommonsMultipartFile getImgs() {
-
return imgs;
-
}
-
public void setImgs(CommonsMultipartFile imgs) {
-
this.imgs = imgs;
-
}
-
}
我相信各位朋友能找现在我发表的相关的知识,就不会对底层的代码陌生,这些代码是我的项目中的一部分,只能贴出这个知识点相关的代码,像Service和Dao层的代码就自己去实现哈。
望大家见谅哈
以上的解决方案只是个人现在的解决方案,有更好的方案的话欢迎回帖探讨。若需要改例子的Demo请发邮件索取。邮箱:
iMissRing@Gmail.com
阅读(3532) | 评论(0) | 转发(0) |