h:messages не отображает сообщения при нажатии p:commandButton
У меня проблема с тегом h:messages в JSF, который просто не показывает никаких сообщений. В журнале Glassfish нет ошибок при нажатии на кнопку. Установка выглядит следующим образом:
test.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 с PrimeFaces <p:commandButton>
, Ajax-запросы по умолчанию не имеют формы обратной связи (если только PrimeFaces' autoUpdate="true"
был использован где-то). Вы должны явно указывать части представления, которые вы хотите обновить в ответе на ajax.
Одним из способов является указание update
атрибут на <p:commandButton>
указать на идентификатор клиента <h:messages>
составная часть.
<h:messages id="messages" ... />
<h:form>
<p:commandButton ... update=":messages" />
</h:form>
Другой способ - заменить его на PrimeFaces. <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>