Как отобразить p:fileUpload invalidFileMessage в p:growl

Я использую <p:fileUpload> который ограничен только PDF. Тем не менее invalidFileMessage показывает внутри <p:fileUpload> составная часть. Как я могу показать это в <p:growl> вместо?

<p:fileUpload allowTypes="/(\.|\/)(pdf)$/"
              invalidFileMessage="File is Invalid. Only PDF files are allowed" />

3 ответа

Вы не можете справиться с этой стороны сервера. Тип файла проверяется на стороне клиента, не затрагивая код на стороне сервера. Итак, любые предложения, которые предлагают создать вручную FacesMessage и / или явно добавить <p:message(s)> невнимательны и не проверены.

Вы должны использовать JQuery. Это решает все.

На основеfileupload.js Исходный код, ваш лучший выбор, чтобы слушать вымышленный show событие контейнера сообщений, а затем переместите контейнер сообщений в конец формы.

Первое продление $.show() на самом деле вызвать show событие.

(function($) {
    var originalShowFunction = $.fn.show;
    $.fn.show = function() {
        this.trigger("show");
        return originalShowFunction.apply(this, arguments);
    };
})(jQuery);

Затем просто создайте слушателя на show событие, которое в основном выполняется, когда появляются сообщения о загрузке файла, а затем анализирует каждое сообщение и использует renderMessage() функция <p:growl> JS API. В приведенном ниже примере предполагается, что вы <p:growl widgetVar="growl"> где-то на той же странице.

$(document).on("show", ".ui-fileupload-content>.ui-messages", function() {
    $(this).children().hide().find("li").each(function(index, message) {
        var $message = $(message);
        PF("growl").renderMessage({
            summary: $(".ui-messages-error-summary", $message).text(),
            detail: $(".ui-messages-error-detail", $message).text()
        });
    });
}); 

Посмотрел пример в витрине Primefaces и нашел это. Актуальная страница:

<p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"  
              mode="advanced"   
              update="messages"
              allowTypes="/(\.|\/)(pdf)$/"/>  

<p:growl id="messages" showDetail="true"/>  

И класс контроллера загрузки файлов:

public void handleFileUpload(FileUploadEvent event) {  
    FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");  
    FacesContext.getCurrentInstance().addMessage(null, msg);  
}  

Может быть, что-то иметь в виду, как отображать сообщения в Primefaces

Ну, добавьте тег сообщения на своей странице что-то вроде:

<p:messages id="test" autoUpdate="true" />

А в fileupload update="@this,test" и ваше сообщение будет отображаться в p:messages. Вы можете легко изменить в рычании работает так же.

Посмотрите в витрине простых лиц для большего количества примеров

Другие вопросы по тегам