2012-05-09 2 views
1

일주일 후 검색 중이며 문제에 대한 적절한 해결책을 찾을 수 없습니다. 그래서 여기 전문가에게 묻습니다.Primefaces 여러 개의 FileUpload가 파일을 표시하지 않고 handleFileUpload를 실행하지 않습니다.

동일한 페이지에 업로드 한 후 이미지를 업로드하고 표시하려면 FileUpload가있는 페이지를 구현하려고합니다.

내 ManagedBean을 @RequestScope으로 설정하면 handleFileUpload 함수가 트리거되지 않습니다. @ViewScope으로 설정하면 기능이 실행되지만 "동적 리소스 스트리밍 오류"오류가 발생합니다. 가 표시됩니다.

서블릿

  • 콩을 얼굴

    1. web.xml을

      <filter> 
      <filter-name>PrimeFaces FileUpload Filter</filter-name> 
      <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class> 
      <init-param> 
          <param-name>thresholdSize</param-name> 
          <param-value>2097152</param-value> 
      </init-param> 
      <init-param> 
          <param-name>uploadDirectory</param-name> 
          <param-value>E:/uploadedImages</param-value> 
      </init-param> 
      

      PrimeFaces의는 FileUpload 필터 : 여기

      내 파일입니다
    2. XHTML

         <p:fileUpload fileUploadListener="#{imageManager.handleFileUpload}" 
               mode="advanced" 
               multiple="true" 
               sizeLimit="2097152" 
               allowTypes="/(\.|\/)(gif|jpe?g|png)$/" 
               uploadLabel="Hochladen" 
               auto="false" 
               cancelLabel="Abbrechen" 
               invalidFileMessage="Die ausgewählte Datei ist kein zugelassene Bilddatei" 
               invalidSizeMessage="Die maximale Bildgröße ist 2MB" 
               label="Datei Auswählen" 
               update="imageList" 
               /> 
      
      
      
          <ui:repeat value="#{imageManager.listImages}" var="imageId" id="imageList"> 
           <h:outputText value="#{imageId}" /> 
           <p:graphicImage value="#{imageManager.image}"> 
            <f:param id="imageId" name="imageId" value="#{imageId}" /> 
           </p:graphicImage> 
          </ui:repeat> 
      
  • +0

    내가 P의 원인을 생각한다 : graphicImage는 그 내부 UI 원인을 더 정확하게하기 위해 여기

    누군가가 같은 문제를 가지고 경우에 솔루션입니다 조금 구글 반복하고 여기에 HTTP 봐 : //stackoverflow.com/questions/9320557/how-to-use-pgraphicimage-with-streamedcontent-inside-uirepeat-hdatatable-pda and here http://stackoverflow.com/a/8068684/617373 – Daniel

    답변

    0

    @Daniel, 나를 blieve. 나는 내 질문을 게시하기 전에 여러 날을 수색했다. 그러나 나는 혼자서 문제를 해결했다.

    @Controller 
        @Scope(WebApplicationContext.SCOPE_REQUEST) 
        public class ImageManager implements Serializable { 
    
         private final static int MAX_UPLOADED_FILES = 5; 
         private final static String UPLOADED_FILES_PATH = "E:/uploadedImages"; 
    
         private final static Map<UUID, UploadedFile> uploadedFiles = new HashMap<>(); 
    
         private final static List<String> listImages = new ArrayList<>(); 
         private StreamedContent image; 
    
         private static StreamedContent defaultImage = null; 
         static { 
          try { 
           defaultImage = new DefaultStreamedContent(new FileInputStream(new File("E:\\uploadedImages\\t.jpg")), "image/jpg"); 
          } 
          catch (FileNotFoundException e) { 
           e.printStackTrace(); 
          }   
         } 
    
         public List<String> getListImages() { 
          return listImages; 
         } 
    
         public StreamedContent getImage() { 
          final ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext(); 
          final String imageId = (String) externalContext.getRequestParameterMap().get("imageId"); 
    
          if (imageId != null) { 
           final UUID imageIndex = UUID.fromString(imageId); 
           image = new DefaultStreamedContent(new ByteArrayInputStream(uploadedFiles.get(imageIndex).getContents()), "image/jpg"); 
    
           return image; 
          } 
    
          return defaultImage; 
         } 
    
         public void handleFileUpload(FileUploadEvent event) { 
          if (uploadedFiles.size() < MAX_UPLOADED_FILES) { 
           final UploadedFile uploadedFile = event.getFile(); 
           if (uploadedFile != null) { 
            final UUID uuid = UUID.randomUUID(); 
            uploadedFiles.put(uuid, uploadedFile); 
            listImages.add(uuid.toString()); 
           } 
          } 
         } 
    
         public void setImage(StreamedContent image) { 
          this.image = image; 
         } 
    
        } 
    
    관련 문제