Jfinal + easyui 整合

来源:互联网 发布:项目进展软件 编辑:程序博客网 时间:2024/06/06 08:24

第一次接触到jfianl,被这种没有xml配置的优点给迷住了(每次配置xml,头部的那些东西 老是记不住该怎么配置,总是需要参考,水平不过关啊,罪过罪过。。。。)

现将easyUI 整合一起,前台又花了 蛮多的时间,这里记录对jfinal框架的认识,以作参考:


1、easyUI  Tree :(异步加载)

第一次接触到easyUI也是因为tree,那段时间要把项目中的  ztree  更改UI,使用easyUI  tree,狠狠的看了一把easyUI  API 文档,现在后端使用的是jfinal ,写法又产生了变化,

在异步加载树中,最明显的不同点就是不用自己去传值,类似于

$('#backendMenuTree').tree("options").url = "/menu/findSubMenuById?pId" + node.id ;

这样,现在简化成
 $('#backendMenuTree').tree("options").url = "/menu/findSubMenuById";

在后端通过jfinal内置的方法  getPara,就可获取到对应的参数值,getPara 方法有很多扩展,类似于getParaToLong,getParaToString 等等,很方便我们取到对应的值。取到

父节点后,查询子节点,还是按照easyUI tree 要求的格式进行数据封装,最后将封装好的json数据通过renderJson(jsonArr)返回到页面。

render     用法有很多,我们可以根据需要使用不同的应用场景使用不同的方法来渲染页面。

----   getPara     render     使用见官网API文档。


2、datagrid

写法上没有什么变化,jfinal 有内置的分页查询方法,如下,只需传递对应的参数即可。


                Integer page = getParaToInt("page");Integer rows = getParaToInt("rows");Page<Blog> paginate = Blog.dao.paginate(page, rows);Map map = new HashMap();//按照easyui datagrid 数据封装格式进行二次封装map.put("rows", paginate.getList());map.put("total", paginate.getTotalRow());renderJson(map);

3   ajax请求

    jfinal 没有具体的实体类对象,只有个抽象类,虽然传递的参数 在后端基本上都可以通过内置的方式getPara 获取,

但是如果涉及到类似于表单有多个参数参数,类似于

var param = {
            "menu.ID":ID,
            "menu.menu_name":menu_name,
            "menu.is_visible":is_visible,
            "menu.menu_type":menu_type,
            "menu.menu_url":menu_url,
            "menu.menu_code":menu_code
    };

请求到后台解析,如果一个个参数去解析获取,就显得麻烦,这时候可以通过Menu menu = getModel(Menu.class,"menu")解析,即可获取当前对象menu相关的参数,如果含有多个对象的传参,可参考http://www.oschina.net/question/203191_63769,提供了一种解决方式


如果post请求进行的是数据库add、update操作,sql中对字符串类型的数据要增加+"\'" 进行转义,避免sql执行报错


缺点:因为没有具体的实例对象,在获取元素时就只能通过

Long id = menu.getLong("ID");
<span style="color:#ff6666;">ID  </span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">要与数据库字段保持一致</span>


4、文件上传(图片上传)

  jFinal  里面 对文件上传的操作较之struts2 的上传更加的简单粗暴,struts2 对上传的文件采取的是文件先缓存到临时目录中,然后由开发者本人对临时文件进行处理


jFinal 是对上传的文件直接上传到指定的目录下

    public void ImageUp() throws Exception{        //定义允许上传的文件扩展名        HashMap<String, String> extMap = new HashMap<String, String>();        extMap.put("image", "gif,jpg,jpeg,png,bmp");        String  result = "";        String dirName = getPara("dir")==null?"image":getPara("dir");        String realpath = getRequest().getRealPath("/upload");        UploadFile uf= getFile("Filedata",realpath);        String affix_id = "";        String affix_name = "";        if(uf!=null){            affix_name = uf.getFile().getName();            File file = uf.getFile();            //检查扩展名            String fileExt = affix_name.substring(affix_name.lastIndexOf(".") + 1).toLowerCase();            if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){                result = "上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。";                file.delete();            }else{                SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");                affix_id = df.format(new Date()) + "_" + new Random().nextInt(1000)+"."+fileExt;                File savefile = new File(new File(realpath),affix_id);                FileUtils.copyFile(file, savefile);                if(file.exists()){                    file.delete();                }                result=JFinal.me().getContextPath()+"/upload/"+affix_id;            }        }else{            result="请选择文件";        }        render(new JsonRender(JSON.toJSONString(result)).forIE());    }

主要方法:UploadFile uf= getFile(parameterName,saveDirectory),parameterName 如果不知道的话,可以直接用getFile() 方法

UploadFile uf= getFile();
通过getFile() 就可以获取上传文件的相关内容(文件名、源文件的路径等),上传图片的动作通过copyFile  方式进行上传,如上代码所示:
FileUtils.copyFile(uf.getFile(), new File(dir));
参数说明:uf.getFile() 源文件    new File(dir)  文件上传在哪里




5、拦截器和验证 知识看了API文档,没有具体的去实现













1 0
原创粉丝点击