Upload解决方案
概述
JSF本身并没有提供上传的组件,如果使用原生态的JSF做上传工具,可能需要花费很多额外的操作,所幸的是,Richfaces提供了一个高效可控并且易用的上传组件:<rich:fileUpload>,该组件界面简洁美观,功能丰富。下面将针对其使用方法进行详细说明。
功能介绍
关键特点如下
1,正在上传的时候能够显示进度条。(以及当前已上传文件的大小、耗时,也可以设置大小的显示格式)
2,能够严格限制上传文件的格式,大小以及数量。(以及是否允许选择重复的文件)
3,同时上传多个文件。(一次选择一个或多个文件上传)
4,内嵌Flash模式。
5,中途取消上传的请求。
6,标准的JSF国际化。
7,友好的用户界面与用户体验。
8,(支持ajax事件)
快速入门
我们在这里使用一个简单的例子,来快速掌握
在页面,只需要引入组件的标签如下:
<rich:fileUpload id="uploadImgFile" fileUploadListener="#{upload.uploadFileListener}"
addControlLabel="select file" uploadControlLabel="upload" listHeight="300" noDuplicate="true" acceptedTypes="jpg, gif, png, bmp">
</rich:fileUpload>
对应的后台bean代码如下
@Name("upload")
@AutoCreate
public class Upload {
public void uploadFileListener(UploadEvent event) throws IOException {
List<UploadItem> items = event.getUploadItems();
for (UploadItem item : items) {
System.out.println("file path:" + item.getFileName() + ",size:"
+ item.getFileSize());
File file=item.getFile();//取到了文件句柄,后面的逻辑即可对文件进行上传等操作
}
}
}
以上代码是为了有个直观的使用印象,达到快速入门的目的,而忽略其他的逻辑。rich:fileUpload里涉及到的标签从字面也能大致理解其中的含义,如fileUploadListener
是指定了上传时所执行的后台方法。 addControlLabel,uploadControlLabel等是用来定义页面操作时该显示的文字。listHeight用来指定上传界面的高度等等,后面会有标签的详细介绍。
在后台bean Upload类中,注意方法的入口参数为UploadEvent event。这个event提供了几个最常用的方法,
isMultiUpload() 这个方法返回true就表示是多个文件上传。
getUploadItems()方法 返回一个集合类型,里面包含了UploadItem对象,这个UploadItem里面就包含了文件本身的信息。
getUploadItem()方法返回第一个上传的文件。下面我们将详细介绍upload组件的细节。
使用细节
配置
文件上传的时候有两个地方可以选择存储,1是临时存储在内存,以待程序进行下一步的处理该文件流,使用此方法最好是文件比较小,否则会占用很多内存。2是指定某个临时目录用于存放正在上传的文件。如果你不配置,默认的是内存存储。(默认方式为临时文件方式)
这两种方式可以在web.xml文件当中可以配置,配置细节如下
<init-param>
<param-name>createTempFiles</param-name>
<param-value>true</param-value>
</init-param>
另外还有一个地方需要在web.xml里面配置,那就是允许上传文件的大小,大小是以byte为单位,配置如下:
<init-param>
<param-name>maxRequestSize</param-name>
<param-value>1000000</param-value>
</init-param>
功能属性
uploadData:该属性是用来指定上传文件的集合,该集合里的对象为UploadItem对象。
如:<rich:fileUpload uploadData="#{bean.data}"/>
在后台bean声明data集合变量与之对应,那么在使用的时候通过遍历UploadItem对象即可取到文件。
fileUploadedListener:该属性是指所有文件上传到临时文件夹或者内存当中以后,每个临时文件执行上传时会依次调用此属性指定的方法。该方法有个入口参数UploadEvent event,该对象已在快速入门当中进行说明。
immediateUpload:如果它被设置为true,那么选中的文件会立即上传,不需要等待点击上传按钮,即会进行上传操作
autoclear:在多个文件上传时,每一个等待上传的文件旁边都有一个cancel按钮,点击cancel按钮时,它会从正在等待上传的列表当中清除当前文件。当文件已经上传完毕时,上传列表旁边按钮的cancel会显示成clear,点击此按钮会从已上传的列表当中清除该文件。他们都是由autoclear为true来控制的。
acceptedTypes:用来限制可以上传文件的后缀类型,如jpg,bmp等等。如:acceptedTypes=’jpg,bmp’
maxFilesQuantity:用来限定可批量上传文件的数量。
noDuplicate:值为true时上传多个时不允许重复的文件。
allowFlash:值为true时,允许组件使用flash模块。
外观属性
listHeight和listWidth:用来控制上传窗口的高度和长度。
disabled:使整个上传组件不可用。
uploadControlLabel:定义上传按钮的名称。
transferErrorLabel:文件上传错误时的描述。
validator与validatorMessage:可以自己定义验证器以及验证不通过时的消息。
stopEntryControlLabel:点击停止按钮时的自定义名称。
sizeErrorLabel:自定义文件大小提示错误内容。
doneLabel:完成后的提示信息。
clearControlLabel:清除按钮的重命名
addControlLabel:添加按钮的自定义命名
cancelEntryControlLabel:按钮cancel的自定义命名 。
事件属性与CSS调整的相关内容在此略去,richfaces官方文档会有详细介绍。
注意事项
1,在上传多个文件的时候,listner方法会被执行多次。有几个文件就会执行几次。所以在listner方法当中要注意,文件的操作方式应该是针对某一个文件进行操作的。
2,前面提到过,上传的文件可能会以临时目录或者是内存的方式存在的,通过uploadItem.getIsTemp()方法,我们可以获得文件是临时目录方式还是内存方式。如果返回false那么该文件是以内存方式存储,这时通过uploadItem获取的文件就需要通过uploadItem.getData()方式来获取byte流。如果返回true那么就要通过getFile()方法来获得文件。否则会抛出空指针异常。
(若上传文件以临时文件存在,上传完记得把临时文件删除)
相关推荐
**Richfaces ShowCase离线包** 是一个专为开发者设计的资源包,它包含了Richfaces框架的演示示例,能够帮助用户在没有网络连接的情况下也能深入理解和学习Richfaces的功能和用法。这个离线包特别适合那些需要在本地...
在使用过程中,开发者可以按照文档逐步了解和掌握各个组件的用法,快速上手并解决实际问题。 总之,RichFaces是JSF开发中的有力工具,它通过丰富的组件和Ajax功能,提升了Web应用的交互性和效率。有了中文开发文档...
RichFaces拥有活跃的社区论坛和文档,开发者可以在这里找到解决方案、示例代码以及与其他开发者交流的机会。 总之,RichFaces提供了一个强大而全面的框架,使开发者能够快速构建富客户端的JSF应用。理解其核心概念...
《深入理解RichFaces UI 3.2.1在JBoss中的应用》 RichFaces UI 3.2.1是JBoss框架中一个重要的组件,它为开发人员提供了一套强大的AJAX(Asynchronous JavaScript and XML)功能,极大地提升了Web应用程序的交互性和...
此外,它还引入了可换肤功能,允许开发者轻松定义和管理颜色方案,通过命名皮肤参数来定制UI外观。 测试方面,尽管文中没有详细介绍,但RichFaces计划提供一个自动化测试工具,生成测试用例以加速组件开发,同时...
RichFaces 4.5 是一个强大的JavaServer Faces (JSF) 框架的扩展库,专为构建富互联网应用程序(Rich Internet Applications, RIA)而设计。这个库提供了丰富的组件集,以及对JavaScript(JS)和Java API的支持,使得...
### RichFaces 3.3 帮助文档关键知识点概览 #### 一、简介 - **RichFaces框架概述:** RichFaces是一个基于JavaServer Faces(JSF)的开源组件库,提供了大量的富客户端组件以及对皮肤的支持。该文档详细介绍了如何...
### Richfaces标签详解 #### 一、概述 Richfaces是一个基于JavaServer Faces(JSF)技术的开源框架,提供了一套丰富的用户界面组件库。这些组件不仅具备强大的功能,还能很好地支持AJAX交互,极大地提高了Web应用...
10. **社区支持**:作为开源项目,RichFaces有一个活跃的社区,提供文档、教程、论坛支持,对于学习和解决问题非常有帮助。 总结来说,"richfaces(里面包含JAR包)"是一个包含了RichFaces库文件和入门示例的资源,...
RichFaces 4.0 是一个强大的JavaServer Faces (JSF) 框架的扩展库,主要用于构建富互联网应用程序(RIA)。它提供了丰富的组件库,增强了用户体验,允许开发者创建交互性和动态性极强的Web应用。这个压缩包包含了...
在本文中,我们将深入探讨 RichFaces 标签的使用,特别是 `rich:componentControl` 和 `rich:modalPanel` 标签,以及 `inputNumberSlider` 和 `PanelBar` 组件。RichFaces 是一个功能丰富的 JavaServer Faces (JSF) ...
10. **开发实践:** API 文档和源码结合使用,可以帮助开发者更深入地理解 RichFaces 的工作原理,提高开发效率,解决实际问题。 通过以上知识点,我们可以看到 RichFaces 3.0.0 作为一个强大的 JSF 扩展,提供了...
关于richfaces的一些比较好的资料,希望大家看了能有收获
3. **错误处理与调试**:RichFaces提供了详细的日志输出和错误报告,帮助开发者诊断和解决应用中的问题。 **五、性能优化** RichFaces 3.0.0在设计时就考虑了性能,但实际应用中仍需根据项目需求进行调整。这可能...
### RichFaces 3.2 用户手册知识点概览 #### 一、引言 RichFaces 3.2 是一款强大的框架,提供了丰富的组件库以及可定制化的皮肤支持,它旨在简化Web应用程序的开发过程,尤其在JavaServer Faces (JSF) 技术的基础...
**RichFaces 参考文档详解** RichFaces 是一个强大的 JavaServer Faces (JSF) 扩展库,专为创建交互式、富客户端Web应用程序而设计。这个“richfaces参考文档”是开发人员的重要资源,尤其是对初学者而言,它提供了...
RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。