2010-03-26 26 views
5

In Salesforce, se sto vincolando un campo di testo in una pagina VisualForce, è un buon modo per convertire i ritorni a capo nel campo di testo in HTML <br/> tag?VisualForce: converti ritorni a capo in intervalli di testo html in un campo di testo lungo

ad es. partendo da qualcosa di simile:

<apex:page standardController="Case"> 
    <apex:pageBlock title="Test"> 
     <p>{!case.Description}</p> 
    </apex:pageBlock>     
    <apex:detail relatedList="false" /> 
</apex:page> 

... se la descrizione è lunga con un sacco di ritorni a capo, come faccio a HTML-Ify esso?

(immagino che questa è una domanda abbastanza facile, e sono sicuro che avrei potuto google, ma per ottenere la comunità Salesforce succedendo qui immagino abbiamo bisogno di alcune domande facili.)

edit: (Bounty aggiunto per cercare di creare qualche emozione)

risposta

4

prova questa:

<apex:outputField value="{!case.Description}"/> 

Uso campi di emissione manterranno la formattazione automagicamente.

+0

Questo non funziona per me. Quando uso outputField, i ritorni a capo non vengono convertiti. – codeulike

+0

Ma sembra funzionare per altre persone! – codeulike

3

alla fine ho raggiunto questo obiettivo con un codice lungo senza fiato.

Nel controllore personalizzato, aggiungere i metodi per restituire il campo dopo manualmente la ricerca e sostituire le interruzioni di riga in campo e la loro sostituzione con <br/> tag:

public string getCaseDescriptionFormatted() 
{ 
    Case c = this.loadCaseFromDatabaseOrWhatever(); 
    return lineBreaks(c.Description); 
} 

private string lineBreaks(string inText) 
{ 
    if (inText == null) 
     return ''; 
    else 
     return inText.replaceAll('<','(').replaceAll('>',')').replaceAll('\n','<br/>'); 
} 

Poi nella pagina, utilizzare apice: outputText con escape = "false":

<apex:outputText value="{!CaseDescriptionFormatted}" escape="false" /> 

Nota che sfuggono = "false" è necessaria per evitare la fuoriuscita di Visualforce i tag HTML. Ciò significa anche che ti lasci aperto agli attacchi di scripting che potrebbero essere inseriti ipoteticamente nei dati. Ecco perché il lineBreaks() fn nel controller sostituisce anche tutti i caratteri < e >.

(Ci può essere un modo migliore per rendere la stringa di sicurezza, suggerimenti benvenuti)

0

si potrebbe provare qualcosa di simile:

{!substitute(Case.Description, '\n', '<br/>')} 
0

Per me, TehNrd inchiodato - Stavo cercando di visualizzare una "descrizione" del caso in un modello di e-mail di notifica VisualForce, e tutti i CR/LF scomparvero e le linee/i paragrafi andavano correndo insieme. Rendendolo un valore di OutputField completamente risolto.

1

TehNrd ha risposto alla domanda per me.

Sto sviluppando una visualizzazione a schede di Casi simile all'esempio comune per gli account.Quando si tratta di mostrare i commenti del caso, non è possibile inserirli in una lista correlata e invece è necessario formattarli a mano. Usando la pagina dell'apice standardBlockTable si ottiene una tabella fitta che non può essere letta dagli utenti, quindi dobbiamo fare più codice mano. Questo approccio mi consente anche di usare i CSS per formattare il contenuto della tabella. Ma il problema era la formattazione dei commenti del caso con interruzioni di riga e messaggi di posta elettronica formattati. La risposta di TehNrd ha funzionato perfettamente!

Per gli altri qui è il codice per visualizzare una scheda con CaseComment formattato insieme a un'azione per modificare il commento.

<apex:tab label="Comments" name="Comments" id="tabComments"> 
    <apex:form > 
     <apex:pageBlock id="commentsPageBlock"> 
      <apex:pageBlockButtons location="top"> 
       <apex:commandButton value="Toggle Sort" action="{!RequeryComments}" id="theButton" rerender="commentsPageBlock"></apex:commandButton> 
      </apex:pageBlockButtons> 
      <table border="0" class="commentsTable">  
      <tr> 
       <th class="commentsActionColumn">Action</th> 
       <th class="commentBodyClass">Comments</th> 
      </tr> 
      <!-- get the case comments from the controller --> 
      <apex:repeat value="{!comments}" var="c"> 
       <tr> 
       <td class="commentsActionColumn"> 
       <!-- open the case comment for edit --> 
       <apex:outputLink title="" value="/{!c.id}/e?parent_id={!c.parentId}&retURL=/apex/{!$CurrentPage.Name}%3Fid={!case.id}" style="font-weight:bold">Edit</apex:outputLink> 
       </td> 
       <td> 
       <!-- display the case comment formatted using the apex outputField --> 
       <div class="commentTdClass"> 
       <apex:outputField value="{!c.commentbody}"></apex:outputField> 
       </div> 
       </td> 
       </tr> 
      </apex:repeat> 
      </table> 
     </apex:pageBlock> 
    </apex:form> 
</apex:tab> 
+0

Aggiornamento: l'azione di modifica funziona solo se l'utente corrente possiede il commento del caso. Sto lavorando a una soluzione e aggiornerò. – Bryan

Problemi correlati