Visualforce: convertire i ritorni a capo in html interruzioni di linea in un campo di testo lungo
-
22-09-2019 - |
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)
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/>')}