h: messages не отображает сообщения при нажатии кнопки p: commandButton
У меня есть проблема с тегом h:messages в JSF, который просто не показывает никаких сообщений. В журнале Glassfish нет ошибок, когда я нажимаю на кнопку. Настройка выглядит следующим образом:
Тест.xhtml:
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:p="http://primefaces.org/ui"
xmlns:j="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</h:head>
<h:body>
<h:messages globalOnly="true"/>
<h:form id="loginform">
<p:commandButton id="testButton" value="Test"
action="#{loginSessionBean.test()}" />
</h:form>
</h:body>
</html>
С Помощью SessionScopedBean:
@ManagedBean
@SessionScoped
public class LoginSessionBean implements Serializable {
private static final long serialVersionUID = 1L;
...
public String test(){
FacesContext fc = FacesContext.getCurrentInstance();
fc.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN, "Test!", null));
return "";
}
1 ответ:
Вы посылаете запрос ajax с примерами
<p:commandButton>
. Ajax-запросы по умолчанию не имеют обратной связи (если только где-то не используется PrimeFaces'autoUpdate="true"
). Вы должны явно указать части представления,которые вы хотели бы обновить в ответе ajax.Одним из способов является указание атрибута
update
на<p:commandButton>
, указывающего на идентификатор клиента компонента<h:messages>
.<h:messages id="messages" ... /> <h:form> <p:commandButton ... update=":messages" /> </h:form>
Другой способ-заменить его примитивами
<p:messages>
, которые имеют атрибутautoUpdate
с целью автоматическое обновление ответа ajax.<p:messages ... autoUpdate="true" /> <h:form> <p:commandButton ... /> </h:form>
Совершенно другой альтернативой является отключение ajax путем добавления атрибута
ajax="false"
к кнопке, таким образом будет выполняться синхронная обратная передача, которая эффективно приводит к полному обновлению страницы, точно так же, как стандартный JSF<h:commandButton>
ведет себя при использовании без<f:ajax>
.<h:messages ... /> <h:form> <p:commandButton ... ajax="false" /> </h:form>
См. также: