2012-10-12 153 views
1

我有一个适用于servlet的上传例程。现在,我试图把这个程序在这样的JSF托管bean:JSF托管的上传bean?

public void uploadFile() throws IOException, ServletException{ 

    FacesContext facesContext = FacesContext.getCurrentInstance(); 
    ExternalContext externalContext = facesContext.getExternalContext(); 
    HttpServletRequest request = (HttpServletRequest) externalContext.getRequest(); 
    HttpServletResponse response = (HttpServletResponse) externalContext.getResponse(); 


    Part filePart = request.getPart("item"); 
    String filename = getFilename(filePart); 
    InputStream filecontent = filePart.getInputStream(); 

    //persist the data here 

} 

试图在服务器上运行它的时候,当然有错误消息:“PWC4016:Request.getPart被称为无多或者将一个@MultipartConfig添加到servlet中,或者将一个multipart-config元素添加到web.xml中“

但是我不知道把这个注解放在哪里,我也没有把jsf生成的servlet的名称我的托管bean,所以我不能把它放到web.xml中。 把这个例程放到一个托管bean中通常是一个坏主意,还是应该坚持servlet变体?

回答

1

@MultipartConfig基本上需要放在FacesServlet。你不能自己做,但这已经完成了the upcoming JSF 2.2,完成一个新的标准<h:inputFile>组件与ajax支持,另请参阅JSF spec issue 802

在此之前,最好的办法是抓取第三方组件库或自制一个自定义组件。

+0

我目前使用JUpload小程序上传文件,因此上传是没有问题的。相反,使用托管bean处理上载似乎目前还不可能 – nico1510

+0

如果源不是JSF视图,那么为什么还需要JSF模型呢?实际上就是使用一个简单的servlet。即使使用JSF 2.2,它也不会(很好)成为可能。 – BalusC

+0

由于我有一个文件下载链接在我的jsf和一个托管的bean服务文件下载(根据你的文章[链接](http://stackoverflow.com/a/3428207/1644061)),我认为这将是一个把这个上传例程放在这个bean中也是个好主意。但我认为那是错误的决定吧? – nico1510