Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16319
  • 博文数量: 3
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 32
  • 用 户 组: 普通用户
  • 注册时间: 2013-05-30 09:01
个人简介

技术创造财富

文章分类

全部博文(3)

文章存档

2013年(3)

我的朋友

分类: JavaScript

2013-10-24 16:11:44

    最近没事自己在用ExtJs4.2+Spring mvc做一个CRM的系统,在其中的管理用户的时候需要显示数据库中的Blob的头像。但是在网上找了很久有没有找到完整的例子,只是一些零零碎碎的知识(也许是我没有找到,嘿嘿)。后来自己整理好了完整的代码,在此给需要的朋友一些帮助!一下是测试后的效果:



以下是ExtJs的代码:


点击(此处)折叠或打开

  1. Ext.onReady(function(){
  2.         //初始化提示信息
  3.         Ext.QuickTips.init();
  4.         //启动加载器
  5.         Ext.Loader.setConfig({
  6.             enabled:true
  7.         });
  8.         //1 建立数据模型
  9.         Ext.define('UserModel' , {
  10.             extend:'Ext.data.Model' ,
  11.             fields:[        //uuid
  12.                 {name:'id' , type:'string'},
  13.                 {name:'username' , type:'string'},
  14.                 {name:'password' , type:'string'}
  15.             ]
  16.         });
  17.         //2 建立数据集合
  18.         Ext.define('UserStore' , {
  19.             extend:'Ext.data.Store' ,
  20.             model:'UserModel' ,
  21.             currentPage:1 ,
  22.             pageSize:5 ,
  23.             proxy:{
  24.                 type:'ajax' ,
  25.                 url:'/Ext/ext/user/findAll.json' ,    //后台的springmvc访问地址 返回json格式的数据
  26.                 reader:{
  27.                     type:'json' ,    //指定返回的数据格式
  28.                     root: 'object',     //真正的数据节点 如:{A:'a',B:'b':C:'c',root:[{A1:'a1'},{B1:'b1'}],count:10} 其中root就为数据区 其他的为自定义或是ExtJS需要的信息
  29.                     totalProperty:'count'    //计数的标志
  30.                 }
  31.             } ,
  32.             autoLoad: true        //自动加载
  33.         });
  34.         
  35.         //3:表格组件 Ext.grid.Panel
  36.         Ext.define('UserGrid',{
  37.             id:'usergrid' ,
  38.             extend:'Ext.grid.Panel' ,
  39.             title:'用户列表' ,
  40.             width:'100%' ,
  41.             height:'100%' ,
  42.             //icon:'js/icons/table/table.png' ,
  43.             renderTo:Ext.getBody() ,
  44.             forceFit:true ,
  45.             selType:'checkboxmodel' ,         //复选框的模式
  46.             multiSelect:true ,                //多选模式
  47.             //columns store
  48.             columns:[
  49.                 {text:'序号' , width:50 , xtype:'rownumberer' ,align:'center'},
  50.                 {text:'用户名' ,dataIndex:'username' , align:'center' , width:80 , sortable:true },
  51.                 {text:'密码' ,dataIndex:'password' , align:'center' , width:80 , sortable:true },
  52.                 {text:'头像' , align:'center' , width:80 ,
  53.                 renderer:function(value, cellmeta, record, rowIndex, columnIndex, store){        //要显示blob数据的图像 这里是重点
  54.                        var disp = "";                                                                //有关renderer更详细的使用请查看相关文档
  55.                        disp = "+record.get('id')+" width=15 height=15 />";    //其中的src后的地址为后台获取图片的地址
  56.                     return disp;
  57.      }}
  58.                 
  59.             ] ,
  60.          dockedItems: [{
  61.          xtype: 'pagingtoolbar',
  62.          dock: 'bottom',
  63.          displayInfo: true
  64.          }],
  65.          //初始化组件的方法
  66.          initComponent:function(){
  67.              var me = this ;
  68.              var UserStore = Ext.create('UserStore');
  69.              //UserStore.load();            //手动加载
  70.              me.store = UserStore;
  71.              me.dockedItems[0].store = UserStore;
  72.              me.callParent(arguments);
  73.          }
  74.         });
  75.         var d = Ext.create('UserGrid');
  76. });


在使用的时候只需引入该文件和ExtJs的必要文件就可以了。

需要引入的文件有:ext-all.css,ext-all.js,ext-lang-zh_CN.js,和以上的js代码文件

以下是后台的JAVA代码:UserController


点击(此处)折叠或打开

  1. package com.yiwen.ext.controller;

  2. import java.io.InputStream;
  3. import java.io.OutputStream;
  4. import java.sql.Blob;

  5. import javax.annotation.Resource;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;

  8. import org.hibernate.Hibernate;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.RequestMapping;
  11. import org.springframework.web.bind.annotation.ResponseBody;

  12. import com.yiwen.ext.dto.DataTransful;
  13. import com.yiwen.ext.service.UserService;
  14. import com.yiwen.ext.util.HibUtil;
  15. import com.yiwen.ext.vo.User;

  16. @Controller
  17. @RequestMapping("/ext/user")
  18. public class UserController {

  19.     private UserService userService;
  20.     
  21.     public UserService getUserService() {
  22.         return userService;
  23.     }

  24.     @Resource
  25.     public void setUserService(UserService userService) {
  26.         this.userService = userService;
  27.     }
  28.     @RequestMapping("/login.json")
  29.     @ResponseBody
  30.     public DataTransful login(User user) throws Exception{
  31.         System.out.println(user.getUsername());
  32.         return userService.login(user);
  33.     }
  34.     /**
  35.      * 查看用户
  36.      * @param request
  37.      * @param response
  38.      * @return
  39.      * @throws Exception
  40.      */
  41.     @RequestMapping("/findAll.json")
  42.     @ResponseBody
  43.     public DataTransful findAll(HttpServletRequest request,HttpServletResponse response) throws Exception{
  44.         String page = request.getParameter("page");     //获取ExtJS传到后台的分页参数
  45.         String size = request.getParameter("limit");
  46.         String start = request.getParameter("start");
  47.         Integer pageNum = (page=="" || page==null)?1:Integer.parseInt(page);
  48.         Integer pageSize = (size=="" || size==null)?5:Integer.parseInt(size);
  49.         Integer pageStart = (start=="" || start==null)?1:Integer.parseInt(start);
  50.         DataTransful dt = new DataTransful();    //此为自定义的数据传输对象
  51.         dt.setPageStart(pageStart);
  52.         dt.setPageNum(pageNum);
  53.         dt.setPageSize(pageSize);
  54.         return userService.findAll(dt);
  55.     }
  56.     /**
  57.      * 添加用户
  58.      * @param user
  59.      * @return
  60.      * @throws Exception
  61.      */
  62.     @RequestMapping("/addUser.json")
  63.     @ResponseBody
  64.     public DataTransful addUser(User user) throws Exception{
  65.         System.out.println(user.getImgs()==null);
  66.         Blob blob = Hibernate.getLobCreator(HibUtil.getSession()).createBlob(user.getImgs().getInputStream(),16777218);
  67.         user.setPhoto(blob);
  68.         return userService.add(user);
  69.     }
  70.     /**
  71.      * 显示blob数据的输出流
  72.      * @param request
  73.      * @param response
  74.      * @throws Exception
  75.      */
  76.     @RequestMapping("/showPic.do")
  77.     public void showPic(HttpServletRequest request,HttpServletResponse response)throws Exception{
  78.         OutputStream out = response.getOutputStream();
  79.         String tid = request.getParameter("id");    //根据用户的id去数据库查找想要的Blob数据字段并返回数据
  80.         Integer id = (tid==null || tid=="")?null:Integer.parseInt(tid);
  81.         if(id!=null){
  82.             InputStream inputStream =userService.getImg(id);
  83.             byte[] b = new byte[4096];
  84.             int n = 0;
  85.             while((n=inputStream.read(b))!=-1){
  86.                 out.write(b, 0, n);    //将数据已流的形式写出
  87.             }
  88.             out.flush();
  89.             out.close();
  90.         }
  91.     }
  92. }


以下是我自定义的数据传输对象:DataTransful


点击(此处)折叠或打开

  1. package com.yiwen.ext.dto;

  2. public class DataTransful {
  3.     
  4.     private Boolean success = false;        //ExtJs中执行proxy方法是需要的标志位
  5.     private Boolean logStat = false;        //账号的登录状态
  6.     private Boolean lockStat = false;        //账号登录后的锁定状态
  7.     private Integer pageNum;        //当前页号
  8.     private Integer pageSize;        //每页显示的数据条数
  9.     private Integer PageStart;        //每页的起始数
  10.     private Object object;            //数据存储对象
  11.     private Long count;                //数据的记录总数
  12.     private String msg = "";        //系统提示信息
  13.     public Integer getPageNum() {
  14.         return pageNum;
  15.     }
  16.     public void setPageNum(Integer pageNum) {
  17.         this.pageNum = pageNum;
  18.     }
  19.     public Integer getPageSize() {
  20.         return pageSize;
  21.     }
  22.     public void setPageSize(Integer pageSize) {
  23.         this.pageSize = pageSize;
  24.     }
  25.     public Integer getPageStart() {
  26.         return PageStart;
  27.     }
  28.     public void setPageStart(Integer pageStart) {
  29.         PageStart = pageStart;
  30.     }
  31.     public Object getObject() {
  32.         return object;
  33.     }
  34.     public void setObject(Object object) {
  35.         this.object = object;
  36.     }
  37.     public Long getCount() {
  38.         return count;
  39.     }
  40.     public void setCount(Long count) {
  41.         this.count = count;
  42.     }
  43.     public Boolean getLogStat() {
  44.         return logStat;
  45.     }
  46.     public void setLogStat(Boolean logStat) {
  47.         this.logStat = logStat;
  48.     }
  49.     public Boolean getLockStat() {
  50.         return lockStat;
  51.     }
  52.     public void setLockStat(Boolean lockStat) {
  53.         this.lockStat = lockStat;
  54.     }
  55.     public String getMsg() {
  56.         return msg;
  57.     }
  58.     public void setMsg(String msg) {
  59.         this.msg = msg;
  60.     }
  61.     public Boolean getSuccess() {
  62.         return success;
  63.     }
  64.     public void setSuccess(Boolean success) {
  65.         this.success = success;
  66.     }
  67. }

以下是我的User对象:

点击(此处)折叠或打开

  1. package com.yiwen.ext.vo;

  2. import java.io.Serializable;
  3. import java.sql.Blob;
  4. import java.util.HashSet;
  5. import java.util.Set;

  6. import javax.persistence.Basic;
  7. import javax.persistence.Column;
  8. import javax.persistence.Entity;
  9. import javax.persistence.FetchType;
  10. import javax.persistence.GeneratedValue;
  11. import javax.persistence.Id;
  12. import javax.persistence.Lob;
  13. import javax.persistence.OneToMany;
  14. import javax.persistence.Table;
  15. import javax.persistence.Transient;

  16. import org.hibernate.annotations.Cascade;
  17. import org.hibernate.annotations.CascadeType;
  18. import org.springframework.web.multipart.commons.CommonsMultipartFile;

  19. import com.fasterxml.jackson.annotation.JsonIgnore;


  20. @Entity
  21. @Table(name="t_user")
  22. public class User implements Serializable{
  23.     @Id
  24.     @GeneratedValue
  25.     private Integer id;
  26.     private String username;
  27.     private String password;
  28.     @Transient
  29.     @JsonIgnore                                //ExtJS+Sprin mvc上传文件是默认是CommonsMultipartFile以上两个注解是不让改字段映射到数据库
  30.     private CommonsMultipartFile imgs;        //并且不让其转换成json数据格式(不让会报错),在我的例子中 它只是一个中转
  31.     @Lob
  32.     @Basic(fetch=FetchType.EAGER)
  33.     @Column(columnDefinition="longBlob")    //存储到数据库的Blob字段,不让转换成Json数据,单独处理
  34.     @JsonIgnore
  35.     private Blob photo;
  36. /*    @JsonIgnore
  37.     @OneToMany(mappedBy="user")
  38.     @Cascade(CascadeType.ALL)
  39.     private Set roleUsers = new HashSet();*/
  40.     private Integer falg;
  41.     
  42. /*    public Set getRoleUsers() {
  43.         return roleUsers;
  44.     }
  45.     public void setRoleUsers(Set roleUsers) {
  46.         this.roleUsers = roleUsers;
  47.     }*/
  48.     public Integer getFalg() {
  49.         return falg;
  50.     }
  51.     public void setFalg(Integer falg) {
  52.         this.falg = falg;
  53.     }
  54.     public Integer getId() {
  55.         return id;
  56.     }
  57.     public void setId(Integer id) {
  58.         this.id = id;
  59.     }
  60.     public String getUsername() {
  61.         return username;
  62.     }
  63.     public void setUsername(String username) {
  64.         this.username = username;
  65.     }
  66.     public String getPassword() {
  67.         return password;
  68.     }
  69.     public void setPassword(String password) {
  70.         this.password = password;
  71.     }
  72.     public Blob getPhoto() {
  73.         return photo;
  74.     }
  75.     public void setPhoto(Blob photo) {
  76.         this.photo = photo;
  77.     }
  78.     public CommonsMultipartFile getImgs() {
  79.         return imgs;
  80.     }
  81.     public void setImgs(CommonsMultipartFile imgs) {
  82.         this.imgs = imgs;
  83.     }
  84. }
我相信各位朋友能找现在我发表的相关的知识,就不会对底层的代码陌生,这些代码是我的项目中的一部分,只能贴出这个知识点相关的代码,像Service和Dao层的代码就自己去实现哈。

望大家见谅哈

以上的解决方案只是个人现在的解决方案,有更好的方案的话欢迎回帖探讨。若需要改例子的Demo请发邮件索取。邮箱:iMissRing@Gmail.com


阅读(3532) | 评论(0) | 转发(0) |
0

上一篇:利用Extjs导出excel文件

下一篇:没有了

给主人留下些什么吧!~~