2010-03-22 2 views
6

ich JSF lerne und kam in dieser Zeile:Was macht <h:messages> in JSF?

<h:messages layout="table"></h:messages> 

in einer Beispielanwendung?

Bin nicht sicher, was diese Linie tut? Ich bekomme keinen Fehler beim Entfernen der Zeile aus dem Code, und bin in der Lage, es auszuführen und die gleiche Ausgabe zu erhalten?

+0

Die Zeile kam mir im Beispielcode: bibek

+0

Ich habe Ihre Frage bearbeitet. Verwenden Sie die Tastenkombination Strg + K, um Code in einer Frage/Antwort zu schreiben. – romaintaz

+0

@romaintaz danke – bibek

Antwort

17

Das Tag h:messages rendert alle Nachrichten für die aktuelle JSF-Ansicht, die nicht durch ein h:message-Tag abgedeckt sind (Anmerkung: das fehlende 's' am Ende). Nachrichten können explizit von Ihren Backing-Beans (FacesContext.addMessage) oder implizit von JSF generiert werden.

z. Wenn Sie einen Eingabewert nach Bedarf markiert haben und der Benutzer das Formular abschickt, ohne den erforderlichen Wert einzugeben, wird eine Fehlermeldung zur Ansicht hinzugefügt. Wenn ein h:message-Tag an die entsprechende Komponente gebunden ist, wird die Nachricht dort gerendert, andernfalls wird es in Ihrer Ansicht (falls vorhanden) vom globalen Tag h:messages gerendert.

Das Attribut layout gibt an, wie der zu generierende HTML-Code aussehen soll. Das Layout table (in Ihrem Beispiel verwendet) verwendet eine HTML-Tabelle zum Anzeigen von Nachrichten, während das Layout list eine Liste mit Aufzählungszeichen verwendet (HTML-Code ul).

Wenn Sie das tun nicht einen h:messages Tag in Ihrer Ansicht angeben und auch keine h:message-Tags, wird der Benutzer nicht über Fehler informiert. Daher empfiehlt es sich, für jede Eingabekomponente Ihrer Ansicht ein h:message-Tag und für Ihre gesamte Ansicht ein h:messages-Tag einzufügen, um sicherzustellen, dass alle Nachrichten für den Benutzer sichtbar sind.

Sie finden eine kompakte JSF-Tag-Referenz unter JSF Toolbox.

+4

Betreffend "rendert alle Nachrichten für die aktuelle JSF-Ansicht, die nicht abgedeckt sind". Ich denke nicht, dass das völlig korrekt ist. Es werden alle Nachrichten angezeigt, außer wenn Sie globalOnly = "true" angeben. –

5

Die Komponenten <h:message> und <h:messages> sind für die Anzeige von Meldungen an Benutzer vorgesehen (in der Regel eine Fehlermeldung).

Wenn Sie beispielsweise eine Überprüfung für ein Feld durchführen, das fehlgeschlagen ist (z. B. hat der Benutzer kein erforderliches Feld ausgefüllt oder eine Zeichenfolge in ein Nur-Zahlenfeld eingegeben), wird FacesMessage zu FacesContext hinzugefügt Objekt. Die <h:message> und <h:messages> werden dann verwendet, um die Nachricht auf der Seite anzuzeigen.

Die Komponente <h:messages> zeigt alle Nachrichten an, die in FacesContext enthalten sind, während die <h:message> einer bestimmten clientId (einem bestimmten Feld) zugeordnet ist. Letzteres ist nützlich, wenn Sie die Nachricht beispielsweise in der Nähe eines Feldes platzieren möchten.

Beachten Sie, dass Sie jede Art von Nachricht hinzufügen können, die den Benutzer angezeigt werden:

FacesContext.getInstance().addMessage(null, new FacesMessage("The message to display")); 

In diesem Beispiel ist der erste Parameter ist das ID-Feld des Feldes, das von dieser Nachricht betroffen ist (nützlich, wenn die Nachricht ist eine Validierungsnachricht für ein bestimmtes Feld). null bedeutet, dass die Nachricht eine allgemeine Information ist (d. H. Nicht mit einem bestimmten Feld verknüpft ist).

Sie können ein Beispiel für diese Komponente here sehen. Beachten Sie, dass dieses Beispiel die rich:messages verwendet, die eine Erweiterung (von RichFaces bereitgestellt) der "Basis" ist, aber das Prinzip ist das gleiche.