Jsf 如何在p:growl中显示p:fileUpload invalidFileMessage

Jsf 如何在p:growl中显示p:fileUpload invalidFileMessage,jsf,file-upload,primefaces,message,growl,Jsf,File Upload,Primefaces,Message,Growl,我使用的是仅限于PDF格式的。但是,invalidFileMessage显示在组件内部。如何在中显示它 <p:fileUpload allowTypes="/(\.|\/)(pdf)$/" invalidFileMessage="File is Invalid. Only PDF files are allowed" /> 我们会在页面中添加一个消息标签,例如: <p:messages id="test" autoUpdate="true" /&g

我使用的是仅限于PDF格式的
。但是,
invalidFileMessage
显示在
组件内部。如何在
中显示它

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

我们会在页面中添加一个消息标签,例如:

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

在fileupload update=“@this,test”中,您的消息将显示在p:messages中。你也可以在咆哮中轻松改变


在primefaces showcase中查找更多示例

在primefaces showcase中查找了一个示例并找到了此示例。实际页面:

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

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

可能需要记住的是如何在Primefaces中显示消息。您无法处理此服务器端。该文件类型在客户端进行验证,而不会命中服务器端的任何代码。因此,任何建议手动创建
FacesMessage
和/或显式添加
的建议都是未经思考和测试的

根据源代码,您的最佳选择是监听消息容器的虚构的
show
事件,然后将消息容器移动到表单的末尾

首先扩展
$.show()
以实际触发
show
事件

(function($) {
    var originalShowFunction = $.fn.show;
    $.fn.show = function() {
        this.trigger("show");
        return originalShowFunction.apply(this, arguments);
    };
})(jQuery);
然后,只需在
show
事件上创建一个侦听器,该事件基本上在出现文件上载消息时运行,然后解析每条消息,并使用
jsapi的
renderMessage()
函数。下面的示例假设您在同一页的某个地方有一个

$(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()
        });
    });
}); 

你好,克莱德福格,你试过你评论中的例子吗?由于您正在使用allowTypes=“/(\.\\/)(pdf)$/”在p:fileUpload进行筛选,因此在上载pdf以外的文件时不会调用handleFileUpload()。所以在咆哮中没有信息。你好,Tankhenk…,不工作。我认为这是不可能的。你找到解决办法了吗?
$(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()
        });
    });
});