我使用的<p:fileUpload>
仅限于PDF。但是,invalidFileMessage
组件内显示<p:fileUpload>
。我怎样才能在<p:growl>
中显示它?
<p:fileUpload allowTypes="/(\.|\/)(pdf)$/"
invalidFileMessage="File is Invalid. Only PDF files are allowed" />
答案 0 :(得分:7)
您无法处理此服务器端。在客户端验证文件类型,而不在服务器端访问任何代码。因此,任何建议手动创建FacesMessage
和/或明确添加<p:message(s)>
的建议都是无意义且未经测试的。
根据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中显示消息,可能需要注意的事项