`

RichFaces 的 文件上传

    博客分类:
  • JSF
阅读更多
RichFaces 的 文件上传

RichFaces 实现文件上传 首先注册自己的Filter(代码在源码/框架中,l\framework\impl\src\main\java\org\ajax4jsf),
在Filter、request(文件夹)中监测文件上传进度;RichFaces自己解析了multi-data/form的数据,与common-upload的工作原理类似;基于Ajax的方式是的Client更加灵活,可以提供更加人性化的UI。

<!--  -->
richfaces的fileupload说明 收藏
官网关于fileupload标签的说明:http://docs.jboss.org/richfaces/3.3.2.GA/en/devguide/html/rich_fileUpload.html
首先,这里使用的版本是:3.3.2sr1,使用richfaces组件先得加入相关包,
其中用到了facelets,所以有jsf-facelets.jar
web.xml中的richfaces过滤器
<filter>
        <display-name>RichFaces Filter</display-name>
        <filter-name>richfaces</filter-name>
        <filter-class>org.ajax4jsf.Filter</filter-class>
<!--初始化参数在这里配置-->
    </filter>
    <filter-mapping>
        <filter-name>richfaces</filter-name>
        <servlet-name>Faces Servlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
        <dispatcher>INCLUDE</dispatcher>
    </filter-mapping>
上传bean(FileUploadBean):
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import org.richfaces.event.UploadEvent;
import org.richfaces.model.UploadItem;

/**
*
* @author Administrator
*/
public class FileUploadBean {
    /** Creates a new instance of FileUploadBean */
    public FileUploadBean() {
    }
private ArrayList<File> files = new ArrayList<File>();
    private int uploadsAvailable = 5;
    private boolean autoUpload = false;
    private boolean useFlash = false;
    public int getSize() {
        if (getFiles().size()>0){
            return getFiles().size();
        }else
        {
            return 0;
        }
    }
    public void paint(OutputStream stream, Object object) throws IOException {
        stream.write(getFiles().get((Integer)object).getData());
    }
    public void listener(UploadEvent event) throws Exception{
        UploadItem item = event.getUploadItem();
        File file = new File(); //自己定义的类型,不IO包中的File
        file.setLength(item.getFileSize());
        file.setName(item.getFileName());
        file.setData(item.getData());
        files.add(file);
        uploadsAvailable--;
    }
}
在faces-config.xml中配置:
<faces-config version="1.2"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
<!--如果不使用facelets下面的FaceletViewHandler可以注解-->
    <application> 
        <view-handler>com.sun.facelets.FaceletViewHandler</view-handler>
    </application>
    <managed-bean>
        <managed-bean-name>fileUploadBean</managed-bean-name>
        <managed-bean-class>com.FileUploadBean</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
</faces-config>
页面组件:
  <rich:fileUpload
                maxFilesQuantity="3"
                noDuplicate="true"
                fileUploadListener="#{fileUploadBean.listener}"
                addControlLabel="Add file..."
                clearAllControlLabel="Clear all"
                clearControlLabel="Clear"
                stopEntryControlLabel="Stop process"
                uploadControlLabel="Upload file"
                id="upload"
                immediateUpload="false"
                acceptedTypes="jpg, gif, png, bmp" allowFlash="true">
                <f:facet name="label">
                    <h:outputText value="{_KB}KB from {KB}KB uploaded --- {mm}:{ss}" />
                </f:facet>
            </rich:fileUpload>
属性说明:noDuplicate="true" 本次上传的文件中不能有重复文件
                 acceptedTypes="jpg, gif, png, bmp" 上传所允许的文件格式,这个格式就是个结尾字符串而已,你把一个不是图片的文
件改成这样的文件照样是可以上传的
                 allowFlash="true" 在打开的文件选择窗口中自动筛选符合文件格式(acceptedTypes)的文件
这里要注意的fileUploadBean.listener方法
在这个方法里面
UploadItem item = event.getUploadItem();
      有几个文件就要调用几次listener方法,除非调用一次得到所有文件,而且我们得知道在调用这个方法之前文件已经存在于服务上了(
以内存或者临时文件的形式)。如果有三个文件要上传,并不是说三个都在了,而是轮到哪个文件调用listener的时候,这个文件已经上传过
了,剩下的工作就是程序员处理文件了。
       再多讲点儿,jsf的上传组件在上传的过程中都是在Filter中就完成了上传任务,因为JSF的生命周期中不能处理带有这种流形式的请求,上传完后,将文件的引用设置到请求中,交给jsf的生命周期进行处理(也就是listener处理了)
       若要得到一个文件的上传信息,通过item.isTempFile()来判断这个文件是以临时文件方式存在还是以byte[]方式存在(意思是说在内存里 面),如果它返回true,则是临时文件,会在服务器的临时目录下(eg. tomcat_home\temp)生成.upload的临时文件(如果是另外生成文件的话这里的临时文件一定要记得删除掉,如果是只是重命名(移动文 件),则不需要)这时候要保存文件就要通过item.getFile获得文件并处理;如果它返回的false,则上传的文件在内存里面,要通过 item.getData()获得byte数组来处理,如果上传的文件比较大的话,这种方式不推荐使用。
如果是临时文件你调用getData方法得到的是null值,如果还要获取数组大小则会报空指针异常;如果是以内存的方式存在,用getFile得到的
也是null值。
如果不在RichFace过滤器(web.xml中)配置以什么方式存储上传文件时,默认方式为临时文件方式。
如果要改为内存方式存储(小文件推荐,大小界线自己衡量),在过滤器中加入
<init-param>
        <param-name>createTempFiles</param-name>
        <param-value>false</param-value>
</init-param>
分享到:
评论

相关推荐

    richfaces实现ajax带进度条的上传

    本教程将详细讲解如何利用RichFaces实现带有进度条的AJAX文件上传。 首先,让我们了解RichFaces的核心特性。RichFaces是一个开源项目,它扩展了JSF标准,提供了许多高级组件,如数据网格、日期选择器、树形视图等。...

    richfaces3.3.1官方demo的源代码

    - **RichComponents**:包含了一系列富客户端组件,如数据网格、时间选择器、文件上传等,每个组件都有详细的示例展示其使用方法和API。 - **Skinning and Theming**:RichFaces允许自定义皮肤和主题,这在创建...

    JSF 上传文件例子

    2. 使用现有的开源库:虽然JSF本身不提供文件上传功能,但有一些第三方库,如PrimeFaces、RichFaces或IceFaces等,提供了JSF兼容的文件上传组件。这些库通常已经处理好了文件上传过程中的复杂性,使得开发者能够轻松...

    一个上传文件的jsf组件

    在实际开发中,为了更方便地处理文件上传,开发者可能会选择第三方库,如PrimeFaces或RichFaces,这些库提供了更高级的文件上传组件,支持进度条显示、多文件上传等功能。 综上所述,JSF中的文件上传涉及到使用`...

    RichFaces-3.2.1-lib

    "大小限制只能先传这个了"暗示可能原文件较大,因为某种上传限制,只上传了这一部分,可能不包含完整的项目或文档。 **标签解析:** 标签“3.2.1 RichFaces”再次强调了我们关注的是RichFaces的3.2.1版本。...

    Practical RichFaces

    4. Extensions:包括一系列增强JSF功能的组件,如数据表的分页和排序、文件上传等。 四、RichFaces的事件模型 RichFaces的事件模型是其核心特性之一,它允许开发人员在后台处理用户交互,并仅更新必要的UI部分。...

    richfaces.jar

    Tomahawk组件库包括了一些实用的UI元素,如日期选择器、文件上传、表单验证等,极大地扩展了JSF的基本组件集合。 **3. RichFaces与MyFaces的融合:** 描述中提到的“richfaces收购了myfaces”,实际上是指RichFaces...

    Websphere 上部署Richfaces 3.10 Demo

    5. **部署应用**:上传文件后,按照提示完成应用的配置,包括类加载器策略、安全设置和资源绑定。确保RichFaces的库(通常在WEB-INF/lib目录下)能够被应用正确识别和使用。 6. **启动应用**:部署完成后,启动应用...

    richfaces-ui-3.2.0.GA

    由于压缩包内只有一个名为 "lib" 的文件夹,我们可以推断其中包含的是 RichFaces 3.2.0.GA 版本的 JAR 文件和其他依赖库。这些 JAR 文件是运行 RichFaces 应用所必需的,包括核心组件、AJAX 处理器、渲染器以及其他...

    jsf 里面richfaces 开发包

    1. **组件库**:RichFaces的组件库是其核心,包括但不限于数据表(`&lt;rich:datascroller&gt;`、`&lt;rich:extendedDataTable&gt;`)、对话框(`&lt;rich:popupPanel&gt;`)、时间选择器(`&lt;rich:calendar&gt;`)、文件上传(`...

    tomcat-5.5.26集成了richfaces-demo

    用户可以使用它上传WAR文件,启动、停止、重新部署应用,以及查看服务器状态。 5. **集成示例**:在Tomcat中预集成richfaces-demo是为了让用户能够快速了解如何在实际项目中使用RichFaces。通过这个例子,开发者...

    richfaces uploadfile出现event.getUploadItem() item.getData()空值的问题解决方法

    这个问题通常与配置、文件上传处理逻辑以及环境设置有关。以下将详细分析问题产生的原因,并提供可能的解决方案。 #### 一、问题背景及现象 当用户选择文件并触发上传操作后,上传事件会被触发。在这个过程中,...

    RichFaces 4 Developer Guide

    - ****:文件上传组件。 - ****:用于就地编辑。 - ****:数字滑块输入。 - ****:数字增减输入。 ##### 3. 丰富的选择器 - ****:用于就地选择。 - ****:下拉列表选择。 - ****:排序列表。 以上就是从...

    Richfaces4.0例子

    Richfaces4.0的核心优势在于它提供了一系列高度可定制的UI组件,如数据网格、图表、滑块、日历、文件上传等,这些组件都具有优秀的视觉效果和用户交互性。它还支持AJAX(异步JavaScript和XML)技术,使得页面更新...

    richface fileupload jar包

    "richface fileupload jar包" 指的是 RichFaces 框架中的文件上传功能相关的 Java Archive (JAR) 文件。RichFaces 是一个基于 JavaServer Faces (JSF) 技术的开源组件库,它提供了丰富的用户界面组件和事件处理机制...

    RichFaces 3.2.0 GA的demo

    Jboss的JSF的组件框架RichFaces 3.2版本发布... rich:clientId(Id), rich:element(Id), rich:component(Id) &lt;br&gt;RichFaces 3.2需要JSF 1.2和JDK 5.0以上版本 &lt;br&gt;******* 这个上传文件是3.2.0 GA的Demo

    richfaces-components-ui-4.0.0.Final-sources

    9. **富组件示例**:在4.0.0.Final版本中,包括了如`&lt;rich:calendar&gt;`(日期选择器)、`&lt;rich:tabPanel&gt;`(选项卡面板)和`&lt;rich:fileUpload&gt;`(文件上传)等组件,这些都是构建复杂UI不可或缺的部分。 10. **...

    richfaces-ui-3.2.0.GA-bin.part1.rar

    Jboss的JSF的组件框架RichFaces 3.2版本发布了,这个版本具有如下新的...这个上传文件是3.2.0 GA的组件库的分卷2 文件名:richfaces-ui-3.2.0.GA-bin.part2.rar 分卷2地址: http://download.csdn.net/source/410832

    richfaces-ui-3.2.0.GA-bin.part2.rar

    rich:clientId(Id), rich:element(Id), rich:component(Id) &lt;br&gt;RichFaces 3.2需要JSF 1.2和JDK 5.0以上版本 &lt;br&gt;******* 这个上传文件是3.2.0 GA的组件库的分卷2 文件名:richfaces-ui-3.2.0.GA-bin...

    JSF+rich 实现 fileUpload

    1. **FileUpload组件**:RichFaces 提供了一个名为`&lt;rich:fileUpload&gt;`的组件,用于在Web页面上创建文件上传功能。这个组件允许用户选择本地文件并将其上传到服务器。`&lt;rich:fileUpload&gt;`提供了多种配置选项,如上传...

Global site tag (gtag.js) - Google Analytics