2014-12-22 4 views
0

<p:fileUpload>으로 여러 파일을 업데이트하려고합니다. 파일을 업로드 한 후에 잘 작동하는 경로가있는 List를 설정합니다.p : fileUpload 내부 p : 대화 상자에서 @ViewScoped 값이 손실 됨

그런 다음 사용자는 다른 선택적 정보를 입력 한 다음 양식을 제출하기 위해 버튼을 클릭해야합니다.

사용자가 버튼을 클릭하면 public void handleFileUpload(FileUploadEvent event)에서 수행 된 목록에 대한 모든 정보가 손실됩니다. handleFileUpload이 처리 될 때

나는, 나는 또한

@javax.faces.view.ViewScoped를 사용하고 값이 손실되는 이유는 사용자가 버튼을 클릭, 난 이해하지 못하는 경우에만 데이터베이스에 대한 경로를 저장해야 사용자가 화면에 입력 한 내용을 아직 사용할 수 없습니다.

  • JSF 2.2
  • CDI
  • PrimeFaces 5.1

내가 (당신이 충분한 정보가없는 생각하면 그냥 말해)

가 큰 만드는 피하기 위해 아래 코드의 일부를 생략합니다

XHTML :

<h:form> 
    <!-- OMITED --> 
    <p:dialog> 
     <!-- OMITED --> 
     <p:fileUpload fileUploadListener="#{csrBean.handleFileUpload}" 
      mode="advanced" 
      skinSimple="true" 
      cancelLabel="Cancelar" 
      multiple="true" 
      auto="false"/> 
     <!-- OMITED --> 
    </p:dialog> 
    <!-- OMITED --> 
</h:form> 

방법 :

public void handleFileUpload(FileUploadEvent event) { 
    UploadedFile file = event.getFile(); 
    String normalize = FilenameUtils.normalize("uploads/csr/" 
      + csr.getNumero() + "/" + event.getFile().getFileName()); 
    File destino = new File(normalize); 
    try { 
     FileUtils.copyInputStreamToFile(file.getInputstream(), destino); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    CsrOsAnexo anexo = new CsrOsAnexo(); 
    anexo.setCaminho(normalize); 
    anexo.setOs(csr.getRespostaRecente().getOs());  
    csr.getRespostaRecente().getOs().getAnexoList().add(anexo); 


    FacesMessage message = new FacesMessage("Succesful", event.getFile() 
      .getFileName() + " is uploaded."); 
    FacesContext.getCurrentInstance().addMessage(null, message); 
} 

디버깅, 나는 csr.getRespostaRecente().getOs().getAnexoList() 모든 아카이브 경로로 가득하지만 최대한 빨리 해당 명령에 의해 호출 된 메소드로 이동 handleFileUpload() 끝으로하고, 그 값이 사라과 값을 볼 수 있습니다 양식이 채워집니다.

답변

3

모달 대화 상자 이 고유 한 양식이어야합니다. 모달 대화 상자가 HTML 출력으로 생성 될 때, 때문에

<h:body> 
    ... 
    <p:dialog> 
     <h:form> 
      ... 
     </h:form> 
    </p:dialog> 
</h:body> 

, 그것은 더 이상 어떤 형태 앉아 수없는 원인 HTML <body>의 말에 이전 자바 스크립트에 의해입니다. 이 재배치는 모달 오버레이 및 Z- 색인에 문제가있는 구형 브라우저 (IE < 읽기)와의 호환성을 보장하기 위해 필요합니다. 파일 업로드는 분명히 아직 양식없이 일했다

<body> 
    ... 
    <form> 
     ... 
    </form> 
    ... 
    <div class="ui-dialog ..."> 
     ... 
    </div> 
</body> 

는이 내부 형태와 숨겨진 iframe 대응을 autocreates 때문에 : 생성 된 HTML DOM 트리 (사용 웹 브라우저의 개발 도구가를 보려면)이처럼 보이도록 끝 "아약스 경험"을 시뮬레이트합니다. 그러나 다른 모든 조치는 기본적으로 JSF 뷰 상태를 잃어 버려 뷰 범위가 지정된 모든 bean이 다시 작성됩니다.

+0

완벽하고 매력적인 부적으로 일했습니다. – prabello