Как отобразить 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. Вы можете легко изменить в рычании работает так же.
Посмотрите в витрине простых лиц для большего количества примеров