QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF)

     这是QFaces的第4个组件,Ajax方式带进度条的文件上传组件,我希望每一个重要组件都提升一个版本,呵呵!这个版本同时修正了ie6下的ajax兼容问题.在介绍完这个组件之后,打算介绍一下如何利用QFaces自定义自己的Ajax组件,希望这个增强框架能对喜欢JSF的人有一些帮助.后面版本的升级可能就不会这么快,或者考虑兼容一下facelets,并修正一些可能出现的错误,还有开源计划,然后继续维护并增加一些比较常用与实用的组件,关注一下JSF2.0的发展等等.

    好了,下面介绍一下QFaces这个新成员吧:FileUpload , 下面是使用过程的截图,对于界面我没有太高的要求,也没有开放相关的属性,还是简单使用为第一要素,如果你自定义组件,可以做出更酷或更花俏的界面出来,呵呵!

   


组件的使用方法非常简单:

    <q:fileUpload process="#{FileUploadBean.process}"/>

以下是html完整代码,需要注意的是组件不能放在form里面,因为组件会渲染自已的form标签:
<f:view>
<html>
    
<head>
        
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        
<title>FileUpload Demo</title>
    
</head>
    
<body>
        
<q:fileUpload process="#{FileUploadBean.process}"/>
    
</body>
</html>
</f:view>

后台bean只要绑定一个处理方法就可以,简单的操作处理,将文件保存至本地硬盘,下面是demo中的示例:

    public boolean process(QFile qfile) throws Exception {
        
// 检查并创建用于保存上传文件的目录
        File fileDir = new File("c:\\my-qfaces-upload-file");
        
if (!fileDir.exists()) {
            fileDir.mkdirs();
        }
        
// 创建文件对象,并将上传的文件保存到该对象.
        File upfile = new File(fileDir.getAbsolutePath() + "\\" + qfile.getFilename());
        qfile.save(upfile);
        
return true;
    }

组件已经帮你处理了很多繁琐的事情,你可以从QFile这个对象中获得上传文件的大小,原始文件名,后缀名,宽度,高度(如果是图片),再进一步进行处理等等.

下面是组件的所有可用属性,除了必要的红色属性之外,其它的都是可选的:

属性

类型

说明

必需

id

String


value

String

上传按钮的标签,如:value=”上传

size

Number

组件宽度,如:size=”20”

showList

Boolean

是否显示已成功上传的文件列表,如:showList=”true”

process

Method

方法绑定,该方法用于处理上传文件,方法签名如下:

Boolean process(QFile)

该方法接受一个QFile类型的参数,处理文件保存之后返回true/false以表示处理成功或失败.

这是一个必要的参数,使用该方法对已经上传的文件进行保存处理,如下将文件保存至d:\myfile.rar

public boolean process(QFile qfile) {

    File myfile = new File(“d:\myfile.rar”);

qfile.save(myfile);

return true;

}

rendered

Boolean

是否显示组件,如:rendered=”false”


































更多的设置需要修改web.xml,比如: uploadMaxSize, uploadThresholdSize, uploadTemp等,文档中有完整的说明,下面是下载地址 :

QFaces 下载页面 -- 基于JSF的Ajax增强框架。



- huliqing@huliqing.name
- http://www.huliqing.name

posted on 2008-11-28 17:34 huliqing 阅读(3011) 评论(7)  编辑  收藏 所属分类: JSF

评论

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF)[未登录] 2008-11-28 17:50 jones

如果是组件自己渲染表单的话,你这个组件基本上没啥用,因为一般文件上传的file都会和其它的input组件同在一个表单里面  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF) 2008-11-28 18:09 huliqing

@jones
呵呵,你的意见很好。
这个我也想到了,但是如果与其它组件放在同一个表单里的话,那就变成了,要么与表单的其他组件一起变成ajax方式提交处理,要不就与其他组件一起正常提交表单(非Ajax方式),
但是与其他组件一起进行ajax提交处理的话,会存在一些问题,可能在通用性上不够好,因为是ajax方式的,所以存在一些特殊的地方,目前我还找不到更好的方法。
不过myfaces组件包中就有一个可以与其他组件一起提交的上传组件,但它不是ajax方式的。  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF)[未登录] 2008-11-28 19:39 jones

利用iframe完全可以实现你这个JSF组件  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF)[未登录] 2008-11-28 19:41 jones

以前我们项目中一个jsf文件ajax上传组件就是用iframe实现的(如果嫌自己写麻烦可以用jquery的ajaxfileupload插件,更简单),只不过是进度条改成了提示信息,跟你这个功能大同小异。  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF) 2008-11-28 19:58 huliqing

@jones
我在组件中也使用了iframe, 我也明白使用这个可以处理这样的功能的,只不过我需要处理form中的action指定到我特定的过滤器,否则就需要在web.xml中再增加过滤器的设定,这样处理完全是可以作到的,并且可以做到与所有其它input一同提交表单,但是我发现这个可能会与myfaces的过滤器存在冲突,在重写HttpServletRequest之后可能会与myfaces的过滤器冲突,所以我暂时把他作为单独的组件处理.并且这在某些情况下也是很有用的.  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF) 2009-02-24 11:08 coffeefrog

seam下MS不能用哦...
  回复  更多评论   

# re: QFaces1.2 -- Ajax方式,带进度条的文件上传组件FileUpload(for JSF) 2009-02-26 07:39 huliqing

@coffeefrog
确实与seam不兼容哦
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航:
 

导航

统计

公告

文章原创,欢迎转载
——转载请注明出处及原文链接

随笔分类(60)

随笔档案(33)

最新评论

评论排行榜