2010-05-28 11 views
14

Mein Ziel ist es, h: messages zu verwenden, um Benutzer - Fehler und Bestätigungsmeldungen zu vermitteln. Die CSS-Stile, um diese zwei verschiedenen Nachrichten zu zeigen, sind unterschiedlich, tatsächlich möchte ich ein Bild neben der Bestätigungsnachricht verwenden. für zB:Wie verwende ich JSF h: Nachrichten besser?

<tr> <td><img/></td><td><h:msg></td> </td>.

So habe ich versucht, Nachrichten an die Gesichter Kontext auf 2 verschiedenen Client-IDs

<tr> 
      <td height="5"> 
       <h:messages style="color:darkred" id="error_message" /> 
      </td> 
     </tr> 
     <tr> 
      <td width="89%" class="InfoMsg" align="center"> 
       <h:messages id="confirm_message" /> 
      </td> 
     </tr> 

und in der Java-Schicht

FacesMessage facesMessage = new FacesMessage(Constants.saveMessageConfirm); 
    FacesContext.getCurrentInstance().addMessage(Constants.STATIC_CONFIRM_MSG_CLIENT_ID, facesMessage); 

Aber auch auf Basis hinzufügen Wenn ich der client-ID confirm_message Nachrichten hinzufüge - und nur confirm_message - und nicht error_message -, wird die Nachricht zweimal in zwei verschiedenen Stilen angezeigt (siehe HTML oben)

2 Fragen:

1) Was ist das Problem hier?

2) Wenn ich das Bild innerhalb eines td in der zweiten tr zeigen und dieses zweite tr zeigen möchte, wenn Bestätigungsnachrichten vorhanden sind - was ist der beste Weg?

Danke,

Antwort

40

Die h:messages zeigt alle Nachrichten, auch diejenigen, die bereits in einer h:message auf der Seite angezeigt werden. Sie können es jedoch auf setzen, nur Anzeigen von Nachrichten mit einer null Client-ID mit globalOnly="true".

<h:messages globalOnly="true" /> 

Sie die Nachricht auch einen anderen Stil in Abhängigkeit von der FacesMessage.Severity geben kann:

<h:messages infoClass="info" errorClass="error" /> 

mit zum Beispiel das CSS, das versteckt die INFO Nachrichten und macht ERROR Nachrichten rot:

.info { 
    display: none; 
} 
.error { 
    color: red; 
} 

Sie können redisplay="false" verwenden, um es anzuweisen, die bereits angezeigten Nachrichten nicht über ee anzuzeigen <h:message>.

<h:messages redisplay="false" /> 

Sie müssen nur sicherstellen, dass es im Komponentenbaum nach all den anderen Nachrichtenkomponenten gesetzt wird. Sie können, wenn nötig, CSS verwenden, um es irgendwo oben neu zu positionieren.

Nur um sicherzugehen,

facesContext.addMessage("clientId", facesMessage); 

dies wird die angegebene Nachricht an ein <h:message for="clientId"> nicht zu einem <h:messages id="clientId"> befestigen, wie Sie zu erwarten scheinen.

+0

Ich habe eine Frage zu Ihrer ersten Aussage in diesem Post gestellt. Kannst du bitte einen Blick darauf werfen? [Hier ist es] (http://stackoverflow.com/questions/10598549/icemessages-hmessages-showing-messages-which-are-ready-displayed-in-a-comp). –

+0

@this: Entschuldigung, meine Aussage war ja in der Tat falsch. Niemand ist perfekt :) Bitte aktualisieren Sie Ihre Frage. Ich habe diese und andere Antworten aktualisiert. Danke für das Aufwachen. – BalusC

+0

BlausC, du bist erstaunlich. Woher weißt du, dass es nur ein Kindelement haben könnte? – ggb667

4

Änderung <h:messages> zu <h:message>

<h:messages zeigt alle Nachrichten für den aktuellen Kontext, <h:message> zeigt eine bestimmte Nachricht.

und ich glaube, Sie möchten id zu for ändern, um es ein Ziel zu geben, aber ich könnte falsch liegen.

0

Wir können verschiedene Arten von h: Nachrichten für verschiedene Schweregrade haben. Zum Beispiel möchten Sie vielleicht alle Fehlermeldungen in einem roten Kasten anzeigen und mit verschiedenen Stilen wie gelb für warn und grün für Info ruhen. Sie können auch verschiedene Panels verwenden. Sie können dies tun, indem Sie verschiedene h: -Nachrichten verwenden und die Stile einzeln anwenden.

<!--Displays only Error Messages--> 
<h:messages styleClass="mystyle" layout="list" id="msg1" infoStyle="display:none"  warnStyle="display:none"></h:messages> 

<!--Displays only Warning Messages--> 
<h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none"  infoStyle="display:none"></h:messages> 

<!--Displays only Info Messages--> 
<h:messages styleClass="messages" layout="list" id="msg2" errorStyle="display:none"  warnStyle="display:none"></h:messages> 
Verwandte Themen