使用Tomahawk时不调用CommandButton操作:inputFileUpload

时间:2011-10-27 14:58:44

标签: jsp jsf file-upload jsf-2 tomahawk

我正在使用JSF 2.1和JSP文件。我尝试将JSF 2.1与Facelet文件一起使用,但没有让Tomahawk(MyFaces扩展)工作。

我正在尝试使用Tomahawk上传文件。我的表格如下:

<f:view>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
        <title>FILE UPLOAD</title>
    </head>
    <body>
        <fieldset>
            <h:form enctype="multipart/form-data">
                <t:inputFileUpload value="#{fileUploadBean.upFile}"
                                   size="25"
                                   required="true" /><br/>
                <h:commandButton value="Validar" action="#{fileUploadBean.upload}" />
            </h:form>
        </fieldset>
    </body>
</html>
</f:view>

我的bean是(因为我使用的是JSF 2.1,我不需要使用faces-config.xml而且我使用注释):

import java.io.IOException;
import java.io.InputStream;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import org.apache.myfaces.custom.fileupload.UploadedFile;

/**
 *
 * @author federico.martinez
 */
@ManagedBean
@RequestScoped
public class FileUploadBean {

    private UploadedFile upFile;

    public UploadedFile getUpFile(){
        return upFile;
    }

    public void setUpFile(UploadedFile upFile){
        this.upFile = upFile;
    }

    public String upload(){
        InputStream is = null;
        try {
            is = upFile.getInputStream();
            long size = upFile.getSize();
            byte[] buffer = new byte[(int)size];
            is.read(buffer,0,(int)size);
            is.close();
            System.out.println("File Upload Successful.");
            return "processing-file";
        } catch (IOException ex) {
            Logger.getLogger(FileUploadBean.class.getName()).log(Level.SEVERE, null, ex);
            return "error-lf";
        } finally {
            try {
                is.close();
            } catch (IOException ex) {
                Logger.getLogger(FileUploadBean.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }  
}

嗯就是这样,但最后问题是当我点击h:commandButton时,它什么也没做。看起来我的bean中的“上传”方法不起作用。我错过了什么?

1 个答案:

答案 0 :(得分:0)

Tomahawk documentation所述,您需要在ExtensionsFilter注册web.xml。它负责解析multipart/form-data个请求并将多部分表单数据部分转换为正常的请求参数和属性,以便FacesServlet可以继续使用它们。如果您未注册ExtensionsFilter,则FacesServlet无法执行任何操作,因为没有请求参数以确定要更新的模型值和要调用的操作。

另见:


对于具体问题

无关,您应该考虑使用Facelets而不是JSP。它提供了许多优于JSP的优势,例如templatingcomposite componentsajax support