1

我将 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 中“上传”的方法不起作用或其他什么。我错过了什么?

4

1 回答 1

0

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

也可以看看:


与具体问题无关,您应该真正考虑使用 Facelets 而不是 JSP。它提供了许多优于 JSP 的优势,例如模板复合组件ajax 支持

于 2011-10-27T15:05:54.287 回答