2014-11-20 41 views
0

我想使用JSF 2.2新,让用户上传照片到他的个人资料。无论如何,我需要一个Ajax行为,我用下面的代码片段实现:javax.servlet.http.Part没有被转移到服务器端使用<h:inputFile>

<h:form enctype="multipart/form-data"> 
    <h:inputFile value="#{usuarioController.part}"> 
     <f:ajax listener="#{usuarioController.uploadImage}"/> 
    </h:inputFile> 
</h:form> 

但此刻我public void uploadImage()javax.servlet.http.Part部分仍然空..

这是控制器:

@Named(value="usuarioController") 
@SessionScoped 
public class UsuarioController extends GenericPersonificacaoCrudController<Usuario>{ 
    private static final long serialVersionUID = 3233882970467365819L; 
    private Part part; 

    public void uploadImage(){ 
     System.out.println(part); 
    } 

    public Part getPart() { 
     return part; 
    } 

    public void setPart(Part part) { 
     this.part = part; 
    } 
} 

我正在使用Mojarra 2.2.6实现JSF与Tomcat +焊接CDI和Primefaces 5.1这是无关的问题,因为我使用本机fileUpload组件,但我只是包括只是让你知道我也试过使用它和它犯规与使用ajax的mode="advanced"一起工作,是什么让我怀疑它是否与我正在使用的库存在某种不兼容或冲突。

+0

这可能相关http://stackoverflow.com/questions/16336795/jsf-2-2-fileupload-does-not-work-with-ajax-form-appears-to-have-incorrect-enc – kolossus 2014-11-21 20:54:24

回答

0

您试图使用<h:inputFile/>组件的java表示访问该文件;你不应该这样做。如你所知,file应绑定到javax.servlet.http.Part的实例,从中您可以获得InputStream。其余的就此而言非常简单。您的代码会是这个样子:

public Part file; 
//getter and setter 

public void uploadImagem(){ 

    long fileSize = file.getSize(); 
    byte[] fileStorage = new byte[fileSize]; 
    BufferedInputStream bis = new BufferedInputStream(file.getInputStream); 
    bis.read(fileStorage); 

    //do whatever you want with the array. 

} 

提示:你也应该知道,Part也有一个方便的方法write(),使您可以将文件写入到指定目录,直接

+0

感谢您的回复。无论如何,我的文件是javax.servlet.http.Part的一个实例,在我的uploadImagem方法被触发的时候是null。任何线索?再次感谢@kolossus – 2014-11-21 15:59:46

+0

周围的''@ MarcosJ.CKichel在哪里?在这里发布 – kolossus 2014-11-21 16:00:25

+0

这是在模板,是的,我确实把enctype =“multipart/form-data”属性放在它上面,我也覆盖了所有要测试的模板,但它仍然不工作..我使用mojarra 2.2 0.6使用Tomcat 8 .. @kolossus – 2014-11-21 16:03:36

相关问题