本人翻译目的是用来学习Tapestry5的,共享出来希望大家批评指正。计划持续翻译。
![](http://chinajavawolf.iteye.com/javascripts/fckeditor/editor/images/smiley/msn/lightbulb.gif)
Tapestry
上传组件
用法
Upload
组件支持默认值的绑定(基于
id
)和验证。
组件模板
- <t:form>
- <t:errors/>
- <input t:type="upload" t:id="file" validate="required"/>
- <br/>
- <input type="submit" value="Upload"/>
- </t:form>
这里,因为
value
参数没有被绑定,这个组件使用它的容器的文件属性(因为组件的
id
是
”file”
)。如果你想要上传一个不同的属性,可以绑定
value
参数或改变组件的
id.
页面类
- public class UploadExample
- {
- private UploadedFile _file;
- public UploadedFile getFile()
- {
- return _file;
- }
- public void setFile(UploadedFile file)
- {
- _file = file;
- }
- public void onSuccess()
- {
- File copied = new File("/my/file/location/" + _file.getFileName());
- _file.write(copied);
- }
- }
潜在的问题
这个通用的文件上传库使用CommonsIO文件清除器服务在他们不再需要的时候移除临时文件。这个服务创建了一个线程来完成这个工作。如果commons-io库被共享在多个应用中(
例如增加服务器CLASSPATH
)。它可能为一个应用过早的对另一个应用终止这个线程并引发错误。(
见
Resource Cleanup
工作组进行更多的讨论
)
技术上文件清除服务不是Tapestry Upload必需的(在请求结尾处删除临时文件)。然而目前不可能去废除它(改进请求已经作为
FILEUPLOAD-133
提出)。