前沿:JSF本身并没有提供上传组件,如果使用原生的JSF做上传工具,你可能需要做更多的额外操作。幸运的是richfaces知道了我们的苦衷,它提供了高效可控的上传组件<richfaces:fileUpload/>,下面简单给你大家介绍一下如何使用。
1.web.xml中的配置
如果你需要对文件上传的大小提供阀值控制,可以设定,具体参考richfaces的文档。否则我们不做更多处理。
如果你需要配置的自己的文件系统路径,你可以在context-param中配置路径。
<context-param>
<param-name>rentImagesPath</param-name>
<param-value>/images/site/rent/</param-value>
</context-param>
2.page部分:上传组件
<rich:fileUpload fileUploadListener="#{rentPhoto.upload}" maxFilesQuantity="#{rentPhoto.uploadsAvailable}"
id="upload" immediateUpload="#{rentPhoto.autoUpload}" acceptedTypes="jpg, gif, png, bmp" allowFlash="true"
listWidth="500px" listHeight="100px" autoclear="true" status="operStatus"
transferErrorLabel="传输出错--文件过大或名称错误!">
<!-- 上传成功后,刷新图片列表,当然这个组件只是点缀,本文不作介绍 -->
<a4j:support event="onuploadcomplete" reRender="photoList" />
</rich:fileUpload>
上面就是我们的fileUpload上传组件,它的一些属性,很容易理解,当然你可以参考文档。主要看rentPhoto.upload这个侦听器是如何工作的。
3.java部分
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;
public class RentPhoto {
.....
public void upload(UploadEvent event) throws Exception{
FacesContext context=FacesContext.getCurrentInstance();
ExternalContext ec=context.getExternalContext();
//获取servlet,其实你可以一步到位获取
ServletContext sc=(ServletContext)ec.getContext();
//上传项,item里封装了上传文件的所有数据,同时包含http数据
UploadItem item = event.getUploadItem();
Date date=new Date(System.currentTimeMillis());
//解码文件名,当文件命中有中文等其他字符时,你必须这么做
String temp_path=java.net.URLDecoder.decode(item.getFileName(),"utf-8");
//找到文件名,如下操作,你可以根据自己的需要进行优化,具体可以看看java API中I/O流File
if(temp_path.lastIndexOf('.')<0){
return;
}
if(item.getFileSize()>512000){
return;
}
//重命名文件,保留格式。如果你有自己的压缩工具、水印等操作,在此可以加入。。MD5方法是自己写的,你可以使用其他的重命名文件的方案
String fileName=MD5.Md5(date.toString())+temp_path.substring(temp_path.lastIndexOf('.'));
//web站点,简单文件系统路径,web.xml中配置
FileOutputStream out=new FileOutputStream(sc.getRealPath(sc.getInitParameter("rentImagesPath"))+"/"+fileName);
out.write(item.getData());
out.close();
//保存文件名到数据库,文件保存在文件系统中。以下代码仅供参考,请使用自己的数据库操作方式:保存文件的文件名到系统.如果你没有设置文件系统,可以把图片保存在数据库中
Session session=HibernateInit.currentSession();
RPhoto photo=new RPhoto(fileName,rent.getId());
new RPhotoOper().update(session, photo);
HibernateInit.closeSession();
//异步操作,加入列表
photoList.add(photo);
}
}
分享到:
相关推荐
Richfaces3.3.3常用组件使用手册 便于学习Richfaces和a4j和jsf框架 很好很实用
详细的阐述了RichFaces组件中如何实现验证码的刷新
本文档主要根据richfaces3.3.3 用户手册和demo 编写。 Richfaces 下载地址http://www.jboss.org/richfaces/download/stable。 demo 下载地址http://www.jboss.org/richfaces/demos。
Richfaces组件使用指南、richfaces手册(很详细、很全面的教程)
详细的介绍了RichFaces中的Ajax组件的使用配置以及组件的使用方法。是为初学者了解ajax组件提供一点方便
RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。RichFaces组件简介,复合组件,日期控件,Ajax标签, 轻松实现。
java Richfaces组件使用指南
中文版的richfaces组件使用介绍手册,很好用 尤其是对英语不太好的同学,对于初学者来说直接去官网看英文的demo难度有点大,先从中文的入手,了解了再去看英文的获得一些自己的见解,这样效果是不是更好呢
richfaces组件说明文档及使用实例
关于richfaces的一些比较好的资料,希望大家看了能有收获
richfaces中文开发文档 纯中文 适合维护老项目的人
这是关于Richaface的Ajax4j以及richfaces组件的相关介绍,欢迎使用下载,
这是我用来测试的一个工程,都不能在rich:dataTable中使用action actionListener 博文链接:https://insomniask.iteye.com/blog/111030
3.1.3日期组件不支持多语言,因此修改richfaces-ui-3.1.3.GA.jar包中org\richfaces\ui.pack.js为中文
教会如何使用richfaces,及richfaces应用
JSF2和RICHFACES4使用指南
使用richfaces需要用到的jar包! commons-beanutils-1.7.0.jar,commons-codec-1.3.jar,commons-collections-3.2.jar,commons-digester-1.8.jar,commons-discovery-0.4.jar,commons-el-1.0.jar,commons-...
Richfaces标签 简介Richfaces标签相关内容 初学者认知
richfaces标签学习笔记richfaces标签学习笔记richfaces标签学习笔记richfaces标签学习笔记