`
yangchen
  • 浏览: 9630 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

<rich: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>
分享到:
评论

相关推荐

    关于rich:fileUpload和a4j:mediaOutput的使用

    以下是一段简单的示例代码,展示了如何使用`rich:fileUpload`组件: ```xml &lt;rich:fileUpload fileUploadListener="#{bean.fileUploadListener}" allowedTypes="jpg,jpeg,png" maxFilesQuantity="5" maxFileSize=...

    JSF+rich 实现 fileUpload

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

    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. **...

    jsf 里面richfaces 开发包

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

    RichFaces 4 Developer Guide

    - **&lt;rich:fileUpload&gt;**:文件上传组件。 - **&lt;rich:inplaceInput&gt;**:用于就地编辑。 - **&lt;rich:inputNumberSlider&gt;**:数字滑块输入。 - **&lt;rich:inputNumberSpinner&gt;**:数字增减输入。 ##### 3. 丰富的选择器 ...

    用jsf实现的相册管理

    比如,我们可以在相册列表页面使用`&lt;rich:datascroller&gt;`组件实现分页加载,使用`&lt;rich:fileUpload&gt;`组件让用户无需刷新页面即可上传图片,使用`&lt;rich:modalPanel&gt;`展示预览图片的弹窗。 在视图层,我们需要创建JSF...

    richfaces实现ajax带进度条的上传

    3. **创建上传组件**:在JSF页面上,使用`&lt;rich:fileUpload&gt;`标签定义文件上传组件。你可以设置多个属性,如`fileUploadListener`用于监听文件上传事件,`maxFilesQuantity`限制最多可上传的文件数量,`allowFlash`...

    flash与jsp结合上传

    在IT领域,Flash和JSP(JavaServer Pages)的结合使用常常被用来实现富互联网应用程序(RIA,Rich Internet Applications)中的文件上传功能。Flash作为客户端技术,提供了友好的用户界面和跨平台的多媒体支持,而...

    基于Flex的多文件上传

    7. **FileUpload.mxml**:这可能是一个Flex应用程序的主文件,包含文件上传功能的代码。MXML是一种声明式语言,用于构建Flex用户界面和定义组件之间的数据绑定。 8. **nmtlogo.swf**:可能是一个自定义的加载图标...

    flex 文件上传

    #### 二、核心组件:`FileReference` 在Flex中,`FileReference`类是用于处理文件上传的核心组件。它可以捕获用户选择的文件,并将其发送到服务器。在上述代码片段中,我们创建了一个`FileReference`实例,并为其...

    Asp.net Flex 文件批量上传

    总之,Asp.net Flex 文件批量上传涉及客户端与服务器端的紧密协作,通过Flex的UI组件和Asp.net的服务器处理,可以构建出高效、用户体验良好的文件上传功能。实际开发时,还需要根据具体需求调整和优化,如增加断点续...

    各种文件上传(ajax,jquery,wcf,sl)

    7. **Silverlight上传**: Silverlight是Microsoft开发的一个富客户端平台,用于构建RIA(Rich Internet Applications)。虽然现在已不再活跃,但在其鼎盛时期,Silverlight提供了丰富的媒体和UI功能,包括文件上传,...

    Flex+Java多文件上传

    为了便于开发者快速实现这一功能,网上有许多开源工具和组件可供参考,如Apache Commons FileUpload库可以帮助处理Java的文件上传,而在Flex方面,可能有现成的组件库如flex-file-uploader等,它们已经封装好了文件...

    基于Silverlight的文件管理示例程序

    2. "FileUpload"可能是一个模块,专门处理文件上传功能,可能包括客户端的上传组件和与服务器的交互逻辑。 3. "SLFileUpload"可能是一个特定于Silverlight的文件上传组件,它可能封装了Silverlight与服务器之间的...

    使用WCF RIA服务的LightSwitch HTML图片管理器

    例如,使用ASP.NET的FileUpload控件实现文件选择和上传,利用jQuery UI实现进度条效果,以及使用AJAX进行异步通信,提高应用响应速度。 **总结** 通过结合Visual Studio LightSwitch HTML客户端和WCF RIA服务,我们...

Global site tag (gtag.js) - Google Analytics