2016-12-11 1 views
0

모달 대화 상자에서 파일을 업로드해야합니다. 그래서 간단한 비 아약스 모드 primeFaces 너무 fileUpload 구성 요소를 어떻게 관리 :PrimeFaces UploadedFile 모달 대화 상자에서 afax sizelimit

save 방법은 콩에서 호출
<p:dialog id="dlg" widgetVar="dlg" modal="true" appendTo="@(body)" 
      header="#{messages['pages.dlg']}" closeOnEscape="true"> 
    <h:form id="dlgForm" enctype="multipart/form-data"> 
     <!-- Some business data --> 
     <p:fileUpload value="#{bean.uploadedFile}" mode="simple"/> 
     <p:commandButton id="saveBtn" action="#{bean.save}" update="messages" ajax="false" 
      partialSubmit="dlgForm"/> 
    </h:form> 
</p:dialog> 

내가 비즈니스 로직을 실행하는 서비스 방법이있다. 이제 새로운 요구 사항이 생겼습니다 : 파일 크기를 5MB로 제한하십시오. 하지만 sizeLimit 속성을 fileUpload 구성 요소에 사용하려고하면 아무 일도 일어나지 않습니다. 그 이유는 유효성 검증이 클라이언트 측에서 이루어 지지만 비활성화 된 ajax을 사용하면 유효성을 검증 할 수 없기 때문입니다.

  1. 빈에 uploadedFilerequestScoped입니다 - 그래서 save 버튼을 호출 할 때이 데이터를 얻을 수 없습니다

    나는 몇 가지 문제를 advanced 모드를 가지고 있지만, 얻을 것을 시도했다. fileUploadListener에만 저장할 수 있지만 문제가 있습니다. 다른 비즈니스 데이터가 해당 프로세스의 일부로 저장되어야합니다. 업로드 된 파일은 사용자가 제공 한 정보의 일부입니다. 나는 그 데이터없이 파일을 저장하는 것만을 호출 할 수 없다.
  2. upload을 누르면 미리보기 (이미지 파일 인 경우)로 파일을 업로드 할 때 파일을 업로드 한 후 즉시 미리보기가 사라집니다. advanced 모드의 하단 필드에 계속 머물도록 내가 어떻게 말할 수 있습니까? fileUpload 구성 요소? save 버튼을 누를 때만 서버 측에 저장됩니까?

그럼 질문 : 어떻게 그러한 대화 내에서 advanced 구성 요소 유형을 사용할 수 있습니까? 저는 PrimeFaces 6.0, JSF 2.2 (mojara)를 사용하고 있습니다.

답변

0

나는 해결책이있어 매우 간단합니다.

@ManagedBean 
@ViewScoped 
public class Bean { 
    @EJB 
    private SomeService service; 

    private BusinessObjectDTO objectDTO; // DTO with business data from dialog form 
    private byte[] fileData; 
    private String fileName; 

    public void handleFileUpload(FileUploadEvent event) { 
     UploadedFile uploadedFile = event.getFile(); 
     fileData = JSFHelper.getFileData(uploadedFile); 
     fileName = uploadedFile.getFileName(); 
    } 

    // Invoked when save is called from dialog 
    public void save() { 
     service.save(objectDTO, fileData, fileName); 
     // add info message 
    } 
} 

을 그리고 나는 다른 구성 요소에 업로드 된 파일의 미리보기를 보여주는 작업 oncomplete를 얻을 수 있습니다 : 난 그냥 콩의 개인 필드에 업로드 된 파일을 저장해야합니다.

+0

이 ** 또한 ** 뷰잉 된 콩입니다, 귀하의 질문에 언급 한대로 requestscoped 하나! 그리고 JSFHelper에있는 것이 아니라면 어딘가에 실제로 저장하는 것을 보지 못합니다 (이름 만). 그런 다음이 메소드에 인라인 코드를 포함하는 것이 좋습니다. – Kukeltje

+1

@Kukeltje 대화 상자의 버튼을 눌렀을 때 save 메소드에서 저장이 발생합니다. JSFHelper는'UploadedFile' 인스턴스에서 바이트를 가져 오기 위해서만 사용됩니다. –

+0

죄송합니다, 나는 작은 부분을 놓쳤습니다. 하지만 아직도 ** ** 범위를 변경 했지, 그렇지? – Kukeltje

관련 문제