2010-03-26 3 views
5

In Salesforce, wenn ich ein Textfeld in eine VisualForce-Seite binden, was ist eine gute Möglichkeit, die Wagenrücklauf im Textfeld in HTML zu konvertieren <br/> Tags?VisualForce: Konvertieren von Wagenrücklauf zu HTML-Zeilenumbrüchen in einem langen Textfeld

z.B. von so etwas wie dieser Ausgang:

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

... wenn die Beschreibung mit vielen Zeilenumbrüchen lang ist, wie kann ich es HTML-ify?

(Ich denke, das eine ziemlich einfache Frage, und ich bin sicher, dass ich es Google konnte, aber die Salesforce-Community geht hier ich meine, wir brauchen ein paar einfache Fragen. Erhalten)

edit: (Bounty hinzugefügt, um zu versuchen und erzeugen einige Aufregung) diese

Antwort

4

versuchen:

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

Mit Ausgabefelder automatisch die Formatierung beibehalten wird.

+0

Dies funktioniert nicht für mich. Wenn ich outputField verwende, werden Wagenrückläufe nicht konvertiert. – codeulike

+0

Aber es scheint für andere Leute zu funktionieren! – codeulike

3

ich dies schließlich erreicht mit etwas langatmig Code.

Im benutzerdefinierten Controller Methoden fügen Sie das Feld nach dem manuell zurück der Suche und die Zeilenumbrüche im Bereich ersetzen und ersetzt sie durch <br/> tags:

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/>'); 
} 

dann in der Seite verwenden Spitze: output mit entkommen = "false":

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

Beachten Sie, dass = "false" Flucht nötig ist Visual entweicht die hTML-Tags zu verhindern. Das bedeutet auch, dass Sie sich Skripting-Angriffen aussetzen, die hypothetisch in die Daten eingebettet sein könnten. Deshalb ersetzt der lineBreaks() fn im Controller auch alle < und > Zeichen.

(Es kann ein besserer Weg den String sicher, Vorschläge willkommen zu machen)

0

Sie versuchen, so etwas wie könnten:

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

Für mich TehNrd genagelt es - ich versuche, angezeigt werden Ein Fall "Beschreibung" in einer VisualForce-Benachrichtigungs-E-Mail-Vorlage, und alle CR/LFs verschwanden und die Zeilen/Absätze wurden zusammen ausgeführt. Wenn Sie es zu einem OutputField-Wert machen, haben Sie es komplett repariert.

1

TehNrd oben beantwortet die Frage für mich.

Ich entwickle eine Registerkartenansicht von Cases ähnlich dem allgemeinen Beispiel für Accounts.Wenn es darum geht, die Fallkommentare anzuzeigen, können Sie sie nicht einfach in eine verwandte Liste einfügen, sondern müssen sie stattdessen manuell formatieren. Die Verwendung der Standard-Apex-SeiteBlockTable führt zu einer dicht gepackten Tabelle, die von Benutzern nicht gelesen werden kann, so dass wir mehr Handcodierung durchführen müssen. Dieser Ansatz ermöglicht mir auch, CSS zu verwenden, um den Tabelleninhalt zu formatieren. Das Problem bestand darin, die Case-Kommentare mit Zeilenumbrüchen und formatierten E-Mail-Nachrichten zu formatieren. TehNrds Antwort funktionierte perfekt!

Für andere ist hier der Code zum Anzeigen einer Registerkarte mit formatierten CaseComment zusammen mit einer Aktion zum Bearbeiten des Kommentars.

<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

Update: Die Bearbeitungsaktion funktioniert nur, wenn der aktuelle Benutzer den Fallkommentar besitzt. Ich arbeite an einer Lösung und werde updaten. – Bryan

Verwandte Themen