2012-04-12 2 views
2

나는 <rich:fileUpload> 구성 요소가 있으며 형식이 허용되지 않아 파일이 거부 될 때 알림을 표시하려고합니다. 나는 RF가 <rich:notifyMessage>이라는 것을 알았지 만, 파일이 거부되었을 때 메시지를 렌더링 할 수 없다.파일 업로드시 RichFaces 4 알림

<rich:fileUpload id="fileUploadComp" 
        addLabel="Agregar" clearAllLabel="Quitar todos" 
        clearLabel="Quitar" deleteLabel="Quitar" 
        doneLabel="Completado" uploadLabel="Subir archivos" 
        fileUploadListener="#{uploadBean.doUpload}" 
        acceptedTypes="txt, csv" onclear="onclear(event);" 
        noDuplicate="true"> 
     <a4j:ajax event="uploadcomplete" render="validationButton"/> 
     <a4j:ajax event="typerejected" render="notificationFileRejected"/> 
    </rich:fileUpload> 

    <rich:notifyMessage for="fileUploadComp" 
         id="notificationFileRejected" 
         sticky="true" 
         ajaxRendered="true" 
         title="Hello"/> 

을하지만 인스턴스에 대한 JPEG를 선택할 때 어떤 통지 세계를 볼 수 없습니다 : 지금까지 나는 있습니다.

어떻게해야합니까?

UPDATE

이의 주요 아이디어는 "허용되지 않는 파일 형식"등 사용자 뭔가를 알려주는 알림을 보여주는 것입니다.

아이디어가 있으십니까?

+0

, 어떻게 ['acceptedTypes'] (HTTP : //docs.jboss.org/richfaces/latest_3_3_X/en/devguide/html/rich_fileUpload.html)이 유스 케이스에서 작동합니까? 파일 형식 검사만으로 전체 내용을 업로드하는 것이 성능 최적화에 위배됩니다. – nobeh

+1

그런 식으로 생각하지 않습니다. 나는'rich : fileUpload'가 업로드하기 전에 파일의 유형을 검사한다고 생각한다. – BRabbit27

+0

rich : notifyMessage가 메시지를 소비해야합니다. 실제로 메시지가 있는지 확인 했습니까? rich : notifyMessages가이를 표시해야합니다. 메시지를 생성하는 백엔드 메소드를 호출하여 메시지를 생성 할 수 있습니다. –

답변

4

뭔가 같은 : 자바 코드와

<rich:fileUpload id="fileUploadComp" 
       addLabel="Agregar" clearAllLabel="Quitar todos" 
       clearLabel="Quitar" deleteLabel="Quitar" 
       doneLabel="Completado" uploadLabel="Subir archivos" 
       fileUploadListener="#{uploadBean.doUpload}" 
       acceptedTypes="txt, csv" onclear="onclear(event);" 
       ontyperejected="ontyperejected();" 
       noDuplicate="true"> 
    <a4j:ajax event="uploadcomplete" render="validationButton"/> 
</rich:fileUpload> 

<a4j:jsFunction name="ontyperejected" actionListener="#{uploadBean.setMessage()}"/> 

<rich:notifyMessage stayTime="2000" nonblocking="true"/> 

:

public void setMessage() { 
    String message="Wrong filetype..."; 
    FacesContext.getCurrentInstance().addMessage("info", new FacesMessage(FacesMessage.SEVERITY_INFO, message, message)); 
} 

MAG, 밀로 반 데르 그냥 호기심 지

+0

이것은 그 것이다! 하지만 여전히 2 가지. 첫째, 그 세계를 fileUpload 옆에 놓을 수있는 방법이 있습니까? 사용자가 그것을 볼 수있게하고 오른쪽 상단 모서리가 보이지 않도록하고 싶습니다 .---- 둘째, 파일을 선택하면 거부됩니다. 메시지가 나타나지만 다시 잘못된 파일을 선택하면 지구본이 다시 나타나지 않습니다. 어떻게 해결할 수 있습니까? – BRabbit27

+0

jsFunction과 백엔드가 두 번째로 호출 되었습니까? 어쩌면 일부 CSS는 메시지 상자의 위치를 ​​도울 수 있습니다. –

+0

아니요, Backing-bean은 두 번 호출되지 않습니다. 파일 선택 -> 메시지 표시 -> 다시 파일 선택 -> 메시지 없음. 반면, 파일 선택 -> 메시지 표시 -> 파일 선택 -> 메시지 표시 -> 파일 선택 -> 메시지 표시. 연속적으로 동일한 파일을 선택하면 하나의 알림 만 표시됩니다 (한 번 호출되는 백업 빈). – BRabbit27

1

내가 원했을만큼 좋지는 않지만 트릭을 잘 수행합니다.

<rich:fileUpload id="fileUploadComp" 
        addLabel="Agregar" clearAllLabel="Quitar todos" 
        clearLabel="Quitar" deleteLabel="Quitar" 
        doneLabel="Completado" uploadLabel="Subir archivos" 
        fileUploadListener="#{uploadBean.doUpload}" 
        acceptedTypes="txt, csv" onclear="onclear(event);" 
        ontyperejected="ontyperejected();" //THIS IS MY TRICK 
        noDuplicate="true"> 
     <a4j:ajax event="uploadcomplete" render="validationButton"/> 
    </rich:fileUpload> 

    <script> 
     var ontyperejected = function(){ 
      alert('Archivo inválido. Tipos permitidos: .txt y .csv'); 
     } 
    </script> 

단지 JScript 함수를 만들고 경고 메시지를 보내면됩니다. 그리고 voilà. 아직도 누군가가 나타나고 사라지는 그 작은 예쁜 알림 지구를 어떻게 달성하는지 안다면 나는 매우 감사 할 것입니다!

관련 문제