30.22. <w:fileUploadDialog>

一个文件上传的对话框,用于多文件上传

30.22.1. 构件信息

表 30.63. 构件信息

Component Typeorg.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
Component Familyorg.operamasks.faces.component.layout.impl.UIPanel
Component Classorg.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
Tag Classorg.operamasks.faces.webapp.widget.UIFileUploadDialogTag
Renderer Typeorg.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
Renderer Classorg.operamasks.faces.render.widget.ajax.AjaxFileUploadDialogRenderer

继承体系

+java.lang.Object

++javax.faces.component.UIComponent

+++javax.faces.component.UIComponentBase

++++org.operamasks.faces.component.layout.base.UIPanelBase

+++++org.operamasks.faces.component.layout.impl.UIPanel

++++++org.operamasks.faces.component.layout.base.UIWindowBase

+++++++org.operamasks.faces.component.layout.impl.UIWindow

++++++++org.operamasks.faces.component.widget.fileupload.base.UIFileUploadDialogBase

+++++++++org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog

30.22.2. 属性

表 30.64. 属性

animCollapse 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
在构件收缩时是否显示动画效果
animateTarget 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
渐变显示的目标。window从所指定的构件渐变地显示
binding 定义类 javax.faces.component.UIComponentBase
类型 javax.el.ValueExpression(javax.faces.component.UIComponent)
是否必须 延时求值
一个值表达式,用于把该组件链接到一个ManagedBean的某个属性。
bodyStyle 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
容器内元素使用的CSS样式
border 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否显示面板body元素的边框(默认值:true)。默认情况下,边框是一个2px宽的内嵌边框,但当bodyBorder属性被设置成false时可以进一步修改
closable 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
作为TabLayout的一页时,这一页是否可以关闭
collapsed 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件的初始状态是否是收缩的(默认值:false)
collapsible 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件是否可以收缩和展开(默认值:false)
constrain 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否限制window必须在页面可视范围内,默认为false
constrainHeader 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否限制window的header必须在页面可视范围内,默认为false
expandOnShow 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
在显示时是否总是将window展开,默认为false
fileSizeMax 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.Long)
是否必须 延时求值
允许上传文件大小的最大值
header 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否为容器生成header。如果没有设置header属性,而设置了title属性,header会自动生成;如果设置了title属性,但header属性设置为false,则不会生成header
height 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件高度的像素值 (默认是auto)
hideCollapseTool 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否显示收缩/折叠按钮(默认false), 仅在当collapsible属性设置为true时生效
iconCls 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
title前的小图标的CSS Class名称, 比如:"myIcon", 而myIcon的内容可以定义为:.myIcon {background: url(myIcon.gif);}
id 定义类 javax.faces.component.UIComponentBase
类型 java.lang.String
是否必须 延时求值
这个组件的组件标识符。这个值在最近的命名容器类型的父组件范围内,必须是唯一的。
jsvar 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
客户端脚本使用的javascript变量名
lazyLoad 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
对首次不直接渲染的panel(或window)是否延时加载页面,注意此属性必须与url属性配合使用方有效。对accordionLayout、borderLayout中默认折叠的panel,cardLayout、tabLayout中默认未激活的panel以及默认不直接显示的window都可使用。
maskDisabled 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
在面板disabled时,是否用直观的方式标识 (默认值:true)
maximizable 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否可最大化,默认为false
minHeight 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
构件的最小高度
minWidth 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
构件的最小宽度
minimizable 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件是否可最小化
onactivate 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件激活时执行的JavaScript代码
onbeforeexpand 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件展开前执行的JavaScript代码
onclose 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
window被关闭时执行的JavaScript代码
onuploadcomplete 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
上传文件完成事件,在上传文件完成时触发
onuploaderror 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
上传文件出错事件,在上传文件出错时触发
onuploadfailed 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
上传文件失败事件,在上传文件失败时触发
onuploadsuccess 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
上传文件成功事件,在上传文件成功时触发
permittedExtensions 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
允许上传的文件名后缀,默认为*
plain 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
构件如何渲染背景。如果设置为true,将渲染透明背景,否则渲染出较浅颜色的背景
processUpload 定义类 org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog
类型 java.lang.String
是否必须 延时求值
处理文件上传的方法,方法签名必须为void processFileUpload(HttpServletRequest request, HttpServletResponse response)
rendered 定义类 javax.faces.component.UIComponentBase
类型 boolean(boolean)
是否必须 延时求值
一个标志,指出该组件是否要在任何随后的form提交过程中被渲染或处理。 这个属性的缺省值是true。
savePath 定义类 org.operamasks.faces.component.widget.fileupload.base.UIFileUploadDialogBase
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
简单上传文件时文件保存到服务端的位置
show 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
初始化是否显示
showTitleOnCollapse 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
在构件收缩后是否显示标题 (默认值:false). 注意:该属性仅在region="north"或者region="south",属性被设置成true时有效
style 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件渲染时应用到构件的CSS风格,对应于元素的style属性
styleClass 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
空格分隔的CSS风格类名列表,渲染时作为元素的"class"属性
titleCollapse 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Boolean)
是否必须 延时求值
是否允许在单击构件的header时收缩或展开构件 (默认值:false)
toolBarPosition 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
内置工具栏的位置,可能的取值为"top","bottom",或"both"。
url 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件加载页面的url,建议只在accordionLayout、borderLayout、cardLayout、tabLayout、window中使用,最终会渲染成一个iframe
width 定义类 org.operamasks.faces.component.layout.impl.UIWindow
类型 javax.el.ValueExpression(java.lang.String)
是否必须 延时求值
构件宽度的像素值 (默认是auto)
x 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
构件左边界距离父容器左边界的像素数
y 定义类 org.operamasks.faces.component.layout.impl.UIPanel
类型 javax.el.ValueExpression(java.lang.Integer)
是否必须 延时求值
构件上边界距离父容器上边界的像素数

30.22.3. 构件API

30.22.3.1. UIFileUploadDialog(fileUploadDialog的构件类)

表 30.65. 常用方法

show 方法签名 public void show()
参数说明 无参数
返回值 无返回值
方法描述 显示window
close 方法签名 public void close()
参数说明 无参数
返回值 无返回值
方法描述 关闭window
setModal 方法签名 public void setModal(java.lang.Boolean value)
参数说明 是否是模态窗口
返回值 无返回值
方法描述 设置window是否是模态窗口
setHeight 方法签名 public void setHeight(int value)
参数说明 窗口的高度
返回值 无返回值
方法描述 设置window的高度
setWidth 方法签名 public void setWidth(int value)
参数说明 窗口的宽度
返回值 无返回值
方法描述 设置window的宽度

30.22.4. 示例

下面是FileUploadDialog构件的一般用法。

首先创建托管Bean:

@ManagedBean(scope=ManagedBeanScope.REQUEST) 
public class FileUploadDialogBean { 
  
  @Accessible
  private UIFileUploadDialog fileUpload;

  public void processFileUpload(HttpServletRequest request, HttpServletResponse response) throws IOException {
        ServletFileUpload upload = new ServletFileUpload();
        InputStream stream = null;
        BufferedInputStream bis = null;
        BufferedOutputStream bos = null;
        try {
            if (ServletFileUpload.isMultipartContent(request)) {
                if (fileUpload.getFileSizeMax() != null) {
                    upload.setSizeMax(fileUpload.getFileSizeMax());
                }
                FileItemIterator iter = upload.getItemIterator(request);
                while (iter.hasNext()) {
                    FileItemStream item = iter.next();
                    stream = item.openStream();
                    if (!item.isFormField()) {
                        String filename = new File(item.getName()).getName();
                        bis = new BufferedInputStream(stream);
                        bos = new BufferedOutputStream(new FileOutputStream(new File("/tmp/" + filename)));
                        Streams.copy(bis, bos, true);
                    }
                }
                response.getWriter().write("{success:true}");
            }
        } catch (FileUploadException e) {
            response.getWriter().write(String.format("{success:false,message:'%s'}", e.getMessage()));
        } finally{
            if(stream != null){
                try{
                    stream.close();
                }catch(Exception e){}
            }
            if(bis != null){
                try{
                    bis.close();
                }catch(Exception e){}
            }
            if(bos != null){
                try{
                    bos.close();
                }catch(Exception e){}
            }
        }
  } 

  ...... 

}

下面是页面代码:

<w:form>
<w:fileUploadDialog id="fileUpload" fileSizeMax="1048576" binding="#{FileUploadDialogBean.fileUpload}" jsvar="fileUploadDialog" processUpload="#{FileUploadDialogBean.processFileUpload}"></w:fileUploadDialog>
<br /> 
<w:button value="Show File Upload Dialog" onclick="fileUploadDialog.show();return false;" /> <br /> 
</w:form>