2012-06-21 11 views
5

Come si visualizza il contenuto XML con line feed (pretty print) in una colonna DataTable PrimeFaces?Come si visualizza il contenuto XML con line feed (pretty print) in una colonna DataTable PrimeFaces?

Il mio contenuto XML è già in un bel formato di stampa e posso vederlo con i feed di riga quando faccio un System.out.println da un FacesConverter che converte i byte in una stringa prima che venga eseguito il rendering sulla colonna della tabella.

Ecco il codice per il FacesConverter:

@FacesConverter(value="xmlStream") 
public class ByteConverter implements Converter { 

    @Override 
    public Object getAsObject(FacesContext context, UIComponent component, String value) { 
     byte[] buffer = null; 
     try{ 
      buffer = value.getBytes("UTF-8"); 
     }catch(UnsupportedEncodingException e){ 
      buffer = value.getBytes(); 
     } 
     return buffer; 
    } 

    @Override 
    public String getAsString(FacesContext context, UIComponent component, Object value) { 
     String text = null; 
     if (value instanceof byte[]){ 
      try{ 
       text = new String((byte[])value, "UTF-8"); 
      }catch(UnsupportedEncodingException e){ 
       text = new String((byte[])value); 
      } 
     } 
     System.out.println("text=<" + text + ">"); 
     return text; 
    } 

} 

e qui è quello che vedo nella console quando si fa uno System.out.println sopra:

<linkUp> 
    <ifName>eth1</ifName> 
    <linkProperty> 
    <name>1</name> 
    <flags>42</flags> 
    <extensions> 
     <name>foo</name> 
     <value>bar2</value> 
    </extensions> 
    </linkProperty> 
    <linkProperty> 
    <name>2</name> 
    <flags>4668</flags> 
    <extensions> 
     <name>foo</name> 
     <value>bar2</value> 
    </extensions> 
    </linkProperty> 
</linkUp> 

Ma quando i display di dati nella colonna DataTable PF, appare come una singola stringa di riga senza line feed - Esiste un modo per visualizzarlo mentre viene visualizzato sulla console? Come gli altri visualizzano il contenuto XML in una tabella PF?

Hmmm, sembra che questo fa il trucco:

.whiteSpaceClass{ 
    white-space: pre-wrap; 
} 

Ma ora sto avendo a che fare con le righe che si estendono su metà della pagina perché l'XML è così grande. Immagino che il vecchio detto "Attenti a ciò che chiedi" si applica qui ... :)

Ancora, sarebbe bello visualizzare solo le prime poche righe ed essere in grado di espandere/comprimere il resto in base al singolo clic eventi, o anche visualizzare in una scatola, quando la cella è cliccato due volte - problema è che non ho idea di come farlo o se PF sostiene che ... :)

risposta

1

si potrebbe utilizzare filari espandibili per mostrare il tuo intero XML. Vedere un esempio di utilizzo di p:rowExpansion in showcase.