Voraussetzungen:
- JSF 2.1
- Primefaces 5.2
- Glassfish 3,1Primefaces p: Nachrichten werden nicht zeigen erste Facesmessage
Geschichte:
Ich habe ap erstellt: Dialog verwendet zum Anzeigen von FacesMessages auf dem Element ap: messages. Dieser Dialog wird benötigt, da der Benutzer bestimmte FacesMessages mit einem "OK" -Button festschreiben muss, bevor er fortfährt.
Dialog:
<p:outputPanel id="modalMessage">
<p:dialog id="dlgMessageDialog" dynamic="true" style="z-index: 100"
closable="false" widgetVar="wigVarMessageDialog" modal="true"
appendTo="@(body)">
<f:facet name="header">
<h:outputText id="messageDialogHeader"
value="#{messageDialogBean.header}" />
</f:facet>
<p:outputPanel id="modalMessagePanel">
<h:form id="messageForm" enctype="multipart/form-data">
<p:messages id="messages" escape="false" closable="false"
showDetail="true" autoUpdate="true"
for="#{messageDialogBean.messageDialogId}"></p:messages>
<p:spacer height="20px"></p:spacer>
<p:commandButton value="#{msg.btnOk}"
oncomplete="PF('wigVarMessageDialog').hide()" />
</h:form>
</p:outputPanel>
</p:dialog>
</p:outputPanel>
Bean:
@Named("messageDialogBean")
@SessionScoped
public class MessageDialogBean implements Serializable {
private static final long serialVersionUID = 1L;
private final String messageDialogId = "messageDialogId";
private FacesMessage message = new FacesMessage();
private String header = "test";
public void showMessage(final String pHeader, final FacesMessage pMessage) {
if (pMessage != null) {
setHeader(pHeader);
this.message = pMessage;
show();
}
}
public void showWarn(final String pHeader, final String pSummary, final String pDetail) {
setHeader(pHeader);
this.message = new FacesMessage(FacesMessage.SEVERITY_WARN, pSummary, pDetail);
show();
}
public void showInfo(final String pHeader, final String pSummary, final String pDetail) {
setHeader(pHeader);
this.message = new FacesMessage(FacesMessage.SEVERITY_INFO, pSummary, pDetail);
show();
}
public void showError(final String pHeader, final String pSummary, final String pDetail) {
setHeader(pHeader);
this.message = new FacesMessage(FacesMessage.SEVERITY_ERROR, pSummary, pDetail);
show();
}
public void updateDialog() {
RequestContext context = RequestContext.getCurrentInstance();
context.update("mainForm:messageDialogHeader");
}
private void show() {
updateDialog();
RequestContext context = RequestContext.getCurrentInstance();
context.execute("PF('wigVarMessageDialog').show();");
FacesContext.getCurrentInstance().addMessage(this.messageDialogId, this.message);
}
public String getMessageDialogId() {
return this.messageDialogId;
}
public void setHeader(final String pHeader) {
this.header = pHeader;
}
public String getHeader() {
return this.header;
}
public FacesMessage getLastMessage() {
return this.message;
}
}
Eine der Nachrichten, die verpflichtet werden müssen:
this.messageDialogBean.showInfo("Title", "Summary", "Detail");
Problem:
Das Element p: messages des Dialogfelds zeigt die Meldung nicht an, wenn das Dialogfeld das erste Mal geöffnet wird. Nach dem Öffnen und Verstecken zeigt es alle weiteren FacesMessages an.
Frage:
Bisher i Öffnung am useing und closeing den Dialog einmal, wenn die Schnittstelle als workarround initialisiert wird. Weiß annyon, was dieses Problem an erster Stelle verursacht und wie man es richtig löst?
Danke für Antworten
Haben Sie versucht, den Platz der '' '?!? Ich bin 100% sicher, dass es das Problem ist. –
Sie haben Formular in einem Formular? Ich sehe, dass Sie mainForm aktualisieren: messageDialogHeader – Nikola
Verschachtelte Formulare sind in den aktuellen HTML-Spezifikationen nicht zulässig – thatsIch