Visualforce: convertire i ritorni a capo in html interruzioni di linea in un campo di testo lungo

StackOverflow https://stackoverflow.com/questions/2525707

Domanda

In Salesforce, se sto vincolante un campo di testo in una pagina Visualforce, che cosa è un buon modo per convertire il carrello ritorna nel campo di testo in tag HTML <br/>?

es. partendo da qualcosa di simile a questo:

<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 vero?

(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.)

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

È stato utile?

Soluzione

Prova questo:

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

Uso dei campi di uscita manterrà la formattazione automagicamente.

Altri suggerimenti

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

Nel controllore personalizzato, aggiungere i metodi di tornare dopo manualmente il campo ricerca e sostituire le interruzioni di riga nel campo e la loro sostituzione con le etichette <br/>:

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 uscita = "false":

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

Si noti che la fuga = "false" è necessario per evitare la fuoriuscita di Visualforce i tag HTML. Questo significa anche si lascia te aperto a script-attacchi che potrebbero venire ipoteticamente incorporati 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)

TehNrd sopra risposto alla domanda per me.

sto sviluppando una visualizzazione a schede di casi simili all'esempio comune per gli account. Quando si tratta di mostrare il caso commenti non si può semplicemente metterli in un elenco correlato e invece è necessario formattare a mano. Utilizzando i risultati pageBlockTable apice standard in una tabella fitto che non può essere letto dagli utenti quindi dobbiamo fare di più codifica manuale. Questo approccio mi permette anche di usare i CSS per formattare il contenuto della tabella. Ma il problema è stato la formattazione del Caso commenti con interruzioni di riga e messaggi e-mail formattati. La risposta di TehNrd ha funzionato perfettamente!

Per gli altri ecco il codice per visualizzare una scheda con CaseComment formattato con 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>

Hai provato a usare outputText?

Se questo non funziona vota per la mia idea qui: https: // sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 Come ho lo stesso problema quando si cerca di restituire JSON a una pagina.

Altre persone vogliono anche questa idea https://sites.secure .force.com / IdeaExchange / apice / ideaview? id = 08730000000BrhEAAS

Per quanto mi riguarda, TehNrd inchiodato - Stavo cercando di visualizzare un caso "Description" in un modello di e-mail di notifica Visualforce, e tutto il CR / LF scomparve e le linee / paragrafi sono stati sempre correre insieme. Rendendolo un valore OutputField completamente riparato.

Si potrebbe provare qualcosa di simile:

{!substitute(Case.Description, '\n', '<br/>')}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top