2010-07-07 13 views
13

Par défaut, chaque JSF FacesMessage est présenté sur une seule ligne. Je voudrais ajouter un saut de ligne HTML <br /> au message lui-même, de sorte que le message est affiché proprement. Je l'ai essayé comme ci-dessousComment ajouter du code HTML à JSF FacesMessage

message = new FacesMessage("test<br/>test"); 

Cependant, il a été échappé par JSF et est affiché comme texte littéral. Comment puis-je ajouter du code HTML à un FacesMessage sans qu'il échappe?

+0

N'est-ce pas la même question que dans http://stackoverflow.com/questions/3186659/showing-the-jsf-error-messages? – pakore

Répondre

25

En théorie, vous voulez un attribut escape pour le composant h:messages comme le h:outputText a. Vous n'êtes pas le seul à vouloir ça, c'est demandé avant plus que souvent, mais c'est un WONTFIX selon les gars de JSF.

Vous avez plusieurs options:

  1. Utilisation \n au lieu de <br> et CSS en conséquence (appliquent plus facile).

    #messages td { white-space: pre; } 
    
  2. Créer une custom renderer qui s'étend MessageRenderer (peu plus difficile, mais bien si vous voulez couvrir plus que HTML seulement linebreaks).

  3. les messages Gather vous-même dans certains List dans un haricot et les afficher à l'aide <t:dataList>, ou lorsque vous utilisez déjà Facelets au lieu de JSP, en utilisant <ui:repeat>. De cette façon, vous pouvez utiliser <h:outputText escape="false"> pour afficher les messages individuels. Ou, lorsque vous êtes déjà sur JSF 2.0, il vous suffit de parcourir FacesContext#getMessageList() par vous-même. Chaque article vous donne un FacesMessage retour qui à son tour offre plusieurs getters. Vous pouvez ensuite afficher le résumé dans un <h:outputText escape"false" />.

    <ul> 
        <ui:repeat value="#{facesContext.messageList}" var="facesMessage"> 
         <li> 
          <h:outputText value="#{facesMessage.summary}" escape="false" /> 
         </li> 
        </ui:repeat> 
    </ul> 
    
  4. Ou, lorsque vous utilisez la bibliothèque utilitaire JSF OmniFaces, utilisez son <o:messages> component au lieu qui a un support pour escape attribut.

    <o:messages escape="false" /> 
    
+1

Lorsque vous êtes sur JSF 2.0, vous pouvez également utiliser le composant OmniFaces ['' (http://showcase.omnifaces.org/components/messages) avec l'attribut 'escape =" false "'. – Adam

+0

@BalusC Souhaitez-vous lier le problème WONTFIX ou non? Je ne suis pas sûr. – alexander

3

Primefaces 5.3 support HTML sur FacesMessages, la mise juste escape="false" à messages composant:

<p:messages escape="false"/> 
2

je suivais this blog.

StringBuilder sb = new StringBuilder("<html><body>"); 
sb.append("<p>A list of messages are:</p>"); 
for(String str : listMessages){ 
     sb.append("Message: ").append(str).append("<br/>"); 
} 
sb.append("</body></html>"); 

FacesMessage message = new FacesMessage(sb.toString()); 
message.setSeverity(FacesMessage.SEVERITY_INFO); 
FacesContext.getCurrentInstance().addMessage("", message); 

La clé est de ne pas manquer les <html> et <body> balises et les fermer correctement comme un HTML valide. Sinon, les balises HTML apparaissent sous forme de texte dans la boîte de dialogue.