2010-07-07 16 views
13

De forma predeterminada, cada JSF FacesMessage se presenta en una sola fila. Me gustaría agregar un salto de línea HTML <br /> al mensaje en sí, para que el mensaje se muestre ordenadamente. Lo intenté como debajo deCómo agrego código HTML a JSF FacesMessage

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

Sin embargo, se escapó por JSF y se muestra como texto literal. ¿Cómo puedo agregar código HTML a FacesMessage sin que se escape?

+0

¿No es esta la misma pregunta que en http://stackoverflow.com/questions/3186659/showing-the-jsf-error-messages? – pakore

Respuesta

25

En teoría, usted quiere un atributo escape para el componente h:messages como el h:outputText tiene. No eres el único que quiere esto, esto se solicita antes que a menudo, pero es un WONTFIX según los chicos de JSF.

tiene varias opciones:

  1. Uso \n en lugar de <br> y aplicar en consecuencia CSS (más fácil).

    #messages td { white-space: pre; } 
    
  2. Crear una custom renderer que se extiende MessageRenderer (poco más difícil, pero bueno si se quiere cubrir más HTML que sólo saltos de línea).

  3. reunir a los mensajes a uno mismo en List en un frijol y mostrarlos utilizando <t:dataList>, o cuando ya se está utilizando Facelets en vez de JSP, utilizando <ui:repeat>. De esta manera puede usar <h:outputText escape="false"> para mostrar los mensajes individuales.

  4. O, cuando ya está en JSF 2.0, simplemente itere sobre FacesContext#getMessageList() usted mismo. Cada elemento le ofrece una copia de FacesMessage que a su vez ofrece varios captadores. A continuación, podría mostrar el resumen en 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> 
    
  5. O, cuando se está utilizando biblioteca de utilidades JSF OmniFaces, utilice su <o:messages> component lugar que tiene soporte para escape atributo.

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

Cuando estás en JSF 2.0, también puede usar el componente OmniFaces [''] (http://showcase.omnifaces.org/components/messages) con el atributo 'escape =" false "'. – Adam

+0

@BalusC ¿Desea vincular el problema WONTFIX o no? No estoy seguro. – alexander

3

Primefaces 5.3 HTML apoyo en FacesMessages, sólo la creación de escape="false" en messages componente:

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

me siguió 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 clave es que no se pierda los <html> y <body> etiquetas y cerrar de manera adecuada como un HTML válido. De lo contrario, las etiquetas HTML aparecen como texto en el cuadro de diálogo.

Cuestiones relacionadas