2012-03-30 11 views
5

Sto usando \ n nel mio java bean e l'output della variabile in console viene visualizzato correttamente. Mentre il recupero di questo valore da bean a JSF \ n sembra non funzionare ....... qualcuno può suggerirmi come posso far funzionare \ n in JSF.come fare n funziona in <h: inputTextarea>

risposta

16

Il modo più semplice sarebbe applicare CSS white-space: pre sull'elemento padre contenente il testo di cui si desidera conservare newline \n caratteri. Tenuto conto di questa classe di stile CSS:

.preformatted { 
    white-space: pre; 
} 

si potrebbe applicare in questo modo:

<div class="preformatted">#{bean.text}</div> 

o

<h:panelGroup layout="block" styleClass="preformatted">#{bean.text}</h:panelGroup> 

o

<h:outputText value="#{bean.text}" styleClass="preformatted" /> 

ecc

012.

Questa proprietà di stile è anche esattamente ciò che l'elemento <textarea> utilizza per impostazione predefinita. Potresti anche utilizzarlo e renderlo non modificabile impostando disabled="true" o readonly="true".

<h:inputTextarea value="#{bean.text}" disabled="true" /> 

Ovviamente si può sostituire anche tutte le occorrenze \n dal <br/> elemento HTML. In questo modo è possibile visualizzarlo in un elemento che non utilizza white-space: pre e/o non è un elemento <textarea>. Uno dei modi è usare fn:replace().

<h:outputText value="#{fn:replace(bean.text,'\\n','&lt;br/&gt;')}" escape="false" /> 

Questo è solo più grave di white-space: pre.

2

Sostituire tutte le occorrenze di \n con </br> prima di visualizzarlo.

5

È necessario sostituire tutto \ n con <br/> prima di inviare il valore al numero <h:inputTextarea>.

Html utilizza <br/> per l'interruzione di riga e non il \ n come java.

Inoltre, è necessario aggiungere escape="false" al numero <h:outputText (quasi sicuro ...).

1

Quando ho cercato nel testo registrato nel mio database tramite <h:inputTextarea> ho scoperto che i caratteri speciali venivano mantenuti.

Così, dopo aver indagato su ciò che pensavo fosse un'arte oscura di persistenza, ho apprezzato il fatto che la visualizzazione predefinita del componente JSF era in effetti ciò che mi stava deludendo.

Ho scoperto che l'aggiunta di white-space: pre-wrap; a <p> sul foglio di stile ha risolto questo problema per i tag <h:outputText> che venivano forniti con testo da un pojo JPA.

Nel mio caso, avevo bisogno di pre-wrap piuttosto che di pre perché pre si stava avvolgendo per carattere, anziché per parola.

Spero che questo aiuti qualcuno!

Problemi correlati