如何用seam实现文件上传

 1.  需要两个seam组件。一个Tomahawk 和SLSB用来处理JSF action 的 "backing bean"。

1a. Backing Bean:

 

@Name("uploadBean")
public class UploadBackingBean {

    private UploadedFile file;
    
    public void setFile(UploadedFile file) {
        this.file = file;
    }

    @NotNull
    public UploadedFile getFile() {
        return this.file;
    }
    
}

 

1b. Action 和它的接口文件 

@Stateless
@Name("upload")
@Interceptors(SeamInterceptor.class)
public class UploadAction implements Upload {

    private Logger logger;

    /**
     * O arquivo que foi enviado.
     */
    @In
    private UploadBackingBean uploadBean;

    @In
    private FacesContext facesContext;

    @PostConstruct
    public void init() {
        logger = Logger.getLogger(this.getClass());
        logger.debug("init()");
    }

    public String upload() {
        logger.debug("upload()");
        UploadedFile file = uploadBean.getFile();
        
        logger.debug("Abrindo o arquivo como DOM4J");

        logger.debug(file.getName());

        facesContext.addMessage(null, new FacesMessage("Nome do arquivo: "
                + file.getName()));

        return "success";
    }

}

 

 

@Local
public interface Upload {

    public String upload();
    
}

 

2. 如果你想通过facelets存取tomahawk upload 组件,需要定义一个tomahawk.taglib.xml 文件。它应被包含在.war 包的WEB-INF 目录。

 

<?xml version="1.0"?>
<!DOCTYPE facelet-taglib PUBLIC "-//Sun Microsystems, Inc.//DTD Facelet Taglib 1.0//EN" "facelet-taglib_1_0.dtd">
<facelet-taglib>
    <!-- author: thomas.jachmann@mindmatters.de -->
    <namespace>http://myfaces.apache.org/tomahawk</namespace>
    <tag>
        <tag-name>inputFileUpload</tag-name>
        <component>
            <component-type>org.apache.myfaces.HtmlInputFileUpload</component-type>
        </component>
    </tag>
</facelet-taglib>

 

完整的taglib 定义: http://wiki.apache.org/myfaces-data/attachments/Use_Facelets_with_Tomahawk/attachments/tomahawk.taglib.xml

3. web.xml中,Tomahawk 需要的部分:

	<!-- My Faces Extensions Filter -->
    <filter>
        <filter-name>extensionsFilter</filter-name>
        <filter-class>org.apache.myfaces.component.html.util.ExtensionsFilter</filter-class>
        <init-param>
            <param-name>uploadMaxFileSize</param-name>
            <param-value>100m</param-value>
			<!-- 
            <description>Set the size limit for uploaded files.
                Format: 10 - 10 bytes
                        10k - 10 KB
                        10m - 10 MB
                        1g - 1 GB
            </description>
             -->
        </init-param>
        <init-param>
            <param-name>uploadThresholdSize</param-name>
            <param-value>100k</param-value>
			<!-- 
            <description>Set the threshold size - files
                    below this limit are stored in memory, files above
                    this limit are stored on disk.

                Format: 10 - 10 bytes
                        10k - 10 KB
                        10m - 10 MB
                        1g - 1 GB
            </description>
             -->
        </init-param>
        <!--
        <init-param>
            <param-name>uploadRepositoryPath</param-name>
            <param-value>/temp</param-value>
            <description>Set the path where the intermediary files will be stored.
            </description>
        </init-param>
        -->
    </filter>

    <filter-mapping>
        <filter-name>extensionsFilter</filter-name>
        <url-pattern>*.seam</url-pattern>
    </filter-mapping>

	<!-- MyFaces Tomahawk Library -->

    <context-param>
        <param-name>facelets.LIBRARIES</param-name>
        <param-value>/WEB-INF/tomahawk.taglib.xml</param-value>
    </context-param>

 

4. HTML可以像这样: 

<h:form enctype="multipart/form-data">
	<t:inputFileUpload storage="file" value="#{uploadBean.file}"/>
        <h:commandButton value="Submit" action="#{upload.upload}"/>
        <h:messages/>
</h:form>

 

5.  最后,把tomahawk.jar 、the commons-file-upload.jar、common-io.jar 打包到ear。当然需要在MANIFEST.MF 文件中修改class-path。

 Class-Path: jboss-seam.jar commons-fileupload-1.1.jar commons-io-1.2.jar tomahawk.jar

 希望有所帮助. Regards. Marcio Endo

 下面有附件。文件是fileupload.zip。它不包含完善的build.xml。不过你可以通过ant -f packaging-build.xml 生成必需的.ear。

例子运行环境:

  • JBoss-4.0.4.CR2
  • JBoss-Seam-1.0.0.CR2
  • MyFaces 1.1.1
  • Tomahawk 1.1.1

 Marcio Endo


不必修改manifest 文件。我已经把全部tomahawk 组件集成了。一会儿我把设置贴出来。

Fady Matar


Alternative FileUpload
我已经集成了例子文件,不需要backing bean ,用seam gen工具建立项目。

Arthur Marinis


附件:
fileupload.zipInfo on fileupload.zip1849616 bytes

 

bq_cui:

这个例子我还没有测试,应该还不能将文件上传信息保存到数据库中。2007-4-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值