我正在使用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中的“上传”方法不起作用。我错过了什么?
答案 0 :(得分:0)
如Tomahawk documentation所述,您需要在ExtensionsFilter
注册web.xml
。它负责解析multipart/form-data
个请求并将多部分表单数据部分转换为正常的请求参数和属性,以便FacesServlet
可以继续使用它们。如果您未注册ExtensionsFilter
,则FacesServlet
无法执行任何操作,因为没有请求参数以确定要更新的模型值和要调用的操作。
无关,您应该考虑使用Facelets而不是JSP。它提供了许多优于JSP的优势,例如templating,composite components和ajax support。