2012-04-12 3 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 должно показать их. Возможно, вы сможете сгенерировать сообщение, вызвав метод backend, который затем создает сообщение. –

ответ

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"/> 

С кода Java:

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

MAG, Milo ван дер Зи

+0

Вот оно! Но все-таки 2 вещи. Во-первых, есть ли способ разместить этот глобус рядом с файловым загрузчиком ?, я хочу, чтобы пользователь мог его видеть, а в правом верхнем углу не так заметно. ---- Во-вторых, когда я выбираю файл и его отклоняют появляется сообщение, но если я снова выберу неправильный файл, глобус больше не появится, как его решить? – BRabbit27

+0

Является ли функция jsFunction и бэкэндом второй раз? Возможно, некоторые css могут помочь с расположением окна сообщений. –

+0

Нет, бэк-бэк не называется во второй раз. Выберите файлA -> показывает сообщение -> Выберите еще раз файлA -> нет сообщения. С другой стороны, Select fileA -> показывает сообщение -> select fileB -> показывает сообщение -> select fileA -> показывает сообщение. Если я последовательно выбираю один и тот же файл, появляется только одно уведомление (один раз вызывающий 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 и отправьте предупреждающее сообщение. И вуаля. Тем не менее, если кто-то знает, как достичь этого маленького мигающего глобуса, который появляется и исчезает, я буду очень благодарен!

Смежные вопросы