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

时间:2013-05-22 06:18:00

标签: jsf file-upload primefaces message growl

我使用的<p:fileUpload>仅限于PDF。但是,invalidFileMessage组件内显示<p:fileUpload>。我怎样才能在<p:growl>中显示它?

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

3 个答案:

答案 0 :(得分:7)

您无法处理此服务器端。在客户端验证文件类型,而不在服务器端访问任何代码。因此,任何建议手动创建FacesMessage和/或明确添加<p:message(s)>的建议都是无意义且未经测试的。

http://yoursite.com/login.txt

根据You should use jQuery. It solves everything.源代码,您最好的选择是收听消息容器的虚构show事件,然后将消息容器移动到表单的末尾。

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

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

然后简单地在show事件上创建一个监听器,该监听器基本上在文件上载消息出现时运行,然后解析每个消息并使用renderMessage() JS API的<p:growl>函数。以下示例假设您在同一页面的某个位置<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()
        });
    });
}); 

答案 1 :(得分:0)

在页面中添加一条消息标记,例如:

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

在fileupload update =&#34; @ this,test&#34;您的消息将显示在p:消息中。你可以在咆哮声中轻松改变。

在主要展示中查看更多示例

答案 2 :(得分:-1)

在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中显示消息,可能需要注意的事项