FacesContext.addMessage() не показывает сообщение в p:messages

у меня есть управляемый компонент с методом, который добавляет такое сообщение:

@ManagedBean
@ViewScoped
public class FileMB implements Serializable{

private static final long serialVersionUID = -2843716026642626725L;

private UploadedFile file;
private boolean enabled = false;

public UploadedFile getFile() {
    return file;
}

public void setFile(UploadedFile file) {
    this.file = file;
}

public void upload() {

    FacesMessage message = new FacesMessage("test");
    FacesContext.getCurrentInstance().addMessage(null, message);

}

я вызываю этот метод из xhtml:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:p="http://primefaces.org/ui">
<h:head>
    <title></title>
</h:head>
<h:body>
<h:form>
    <p:commandButton value="Show" type="button" actionListener="#{fileMB.upload}" />
</h:form>
 <h:form id="frmMensajes">
    <p:messages id="mensajes" showDetails="false"/>
</h:form>
</h:body>
</html>

но я не вижу "тестовое" сообщение, я также добавил объявление управляемого компонента в Faces-config, что я мог сделать?


person Oscarmageddon    schedule 17.02.2016    source источник


Ответы (2)


Попробуйте добавить атрибут autoUpdate.

Что-то вроде этого: <p:messages id="mensajes" showDetails="false" autoUpdate="true" />

Согласно документации:

Когда автоматическое обновление включено, компонент сообщений автоматически обновляется с каждым запросом ajax.

person David H.    schedule 17.02.2016
comment
Есть еще одна причина, но ОП сам обнаружит это, когда поймет, что метод действия на самом деле не вызывается (или это просто красная сельдь в вопросе в результате возни). - person BalusC; 17.02.2016
comment
Спасибо всем участникам, мне нужно было только добавить автообновление, и оно отлично работает! спасибо еще раз. я забыл добавить круглые скобки к методу actionListener=#{fileMB.upload()} Primefaces не работает без них - person Oscarmageddon; 17.02.2016

Попробуйте выполнить одно из следующих действий внутри первого h:form

1) p:messages globalOnly="true"

2) p:message for=<command button id> и добавить id в командную кнопку

person BharatG    schedule 17.02.2016
comment
Извините, ни одно из обоих предложений не имеет смысла. В следующий раз сначала проверьте себя, прежде чем делать ответ. - person BalusC; 17.02.2016