一个文件上传的对话框,用于多文件上传
表 30.63. 构件信息
| Component Type | org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog |
| Component Family | org.operamasks.faces.component.layout.impl.UIPanel |
| Component Class | org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog |
| Tag Class | org.operamasks.faces.webapp.widget.UIFileUploadDialogTag |
| Renderer Type | org.operamasks.faces.component.widget.fileupload.impl.UIFileUploadDialog |
| Renderer Class | org.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.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.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的宽度 |
下面是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>