JSF 1.2之前还可以用MyFaces的组件,2.0还是个新玩意,只能靠自己。

开始的想法是自己做一个上传文件组件,组件中封装<input type="file" />,然后用commons-fileupload解析ServletRequest。

 

import org.apache.commons.fileupload.*;
import javax.faces.context.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

@FacesComponent(
"uploadFile.UIUpload")
public class UIUpload extends UIInput {
    
public UIUpload() {
        
this.setRendererType(null);
    }

    @Override
    
public void encodeBegin(FacesContext fc) throws IOException {
        ResponseWriter rw 
= fc.getResponseWriter();
        String clientId 
= this.getClientId(fc);
        rw.startElement(
"input"this);
        rw.writeAttribute(
"type""file"null);
        rw.writeAttribute(
"name", clientId + ".file"null);
        rw.endElement(
"input");
    }

    @Override
    
public void decode(FacesContext fc) {
        ExternalContext external 
= fc.getExternalContext();
        HttpServletRequest request 
= (HttpServletRequest) external.getRequest();
        String clientId 
= getClientId(fc);

        
if(ServletFileUpload.isMultipartContent(request)) {
            FileItemFactory factory 
= new DiskFileItemFactory();
            ServletFileUpload upload 
= new ServletFileUpload(factory);
            
try {
                List fileItems 
= upload.parseRequest(request);
                
//......
            } catch (FileUploadException ex) {
                
//......
            }
        }
    }
}

相关文章:

  • 2022-12-23
  • 2021-04-08
  • 2021-11-11
  • 2022-12-23
  • 2021-10-29
  • 2022-12-23
  • 2021-08-17
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-11-04
  • 2021-10-04
  • 2022-01-11
  • 2022-12-23
相关资源
相似解决方案