Frage

In Salesforce, wenn ich verbindlich ein Textfeld in eine Visualforce-Seite, was ist eine gute Möglichkeit, die Zeilenumbrüche im Text-Feld in HTML <br/> Tags?

zu konvertieren

z. ausgehend von so etwas wie folgt aus:

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

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

(Ich denke, das eine ziemlich einfache Frage, und ich bin sicher, ich könnte es Google, aber die Salesforce-Community erhalten hier los ich heraus wir brauchen ein paar einfache Fragen.)

edit: (Bounty hinzugefügt einige Aufregung zu versuchen und zu generieren)

War es hilfreich?

Lösung

Versuchen Sie diese:

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

Felder Ausgang verwendet, wird beibehalten automatisch formatiert werden.

Andere Tipps

ich schließlich erreicht dies mit etwas langatmig Code.

In dem benutzerdefinierten Controller Methoden fügen Sie das Feld zurückzukehren, nachdem manuell gesucht und die Zeilenumbrüche im Bereich zu ersetzen und sie mit <br/>-Tags zu ersetzen:

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 auf der Seite, die Verwendung Spitze: output mit Flucht = "false":

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

Beachten Sie, dass Flucht = „false“ notwendig ist Visual entweicht die HTML-Tags zu verhindern. Das bedeutet auch, lassen Sie sich auf Scripting-Angriffe öffnen, die von hypothetisch in den Daten eingebettet könnte. Das ist, warum der lineBreaks() fn in der Steuerung auch alle < und > Zeichen ersetzt.

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

TehNrd beantwortet über die Frage für mich.

Ich bin eine tabbed Ansicht der Fälle ähnlich das gängigen Beispiel für Konten zu entwickeln. Wenn es um den Fall zeigt, Kommentare kommt, kann man sich nicht einfach in eine ähnliche Liste setzen und stattdessen müssen sie von Hand zu formatieren. Unter Verwendung der Standard-Spitze pageBlockTable Ergebnisse in einer dicht gepackten Tabelle, die von den Benutzern nicht gelesen werden kann, so dass wir mehr tun Hand Codierung müssen. Dieser Ansatz ermöglicht es auch ich CSS zu verwenden, um die Tabelleninhalte zu formatieren. Aber das Problem war die Formatierung der Fall Kommentare mit Zeilenumbrüche und E-Mail-Nachrichten formatiert. TehNrd Antwort funktionierte perfekt!

Für andere hier ist der Code eine Registerkarte mit formatiert CaseComment angezeigt werden zusammen mit einer Aktion zu bearbeiten Kommentar.

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

Haben Sie versucht, mit output?

Wenn das nicht funktioniert Stimme für meine Idee hier: https: // sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 Wie ich das gleiche Problem haben, wenn sie versuchen JSON auf eine Seite zurückzukehren.

Andere Leute wollen auch diese Idee https://sites.secure .force.com / ideaexchange / Spitze / ideaview? id = 08730000000BrhEAAS

Für mich genagelt TehNrd es - ich versuche, in einer Visual Benachrichtigungs-E-Mail-Vorlage einen Fall „Beschreibung“ angezeigt werden, und alle CR / LFs verschwunden und die Linien / Absätze wurden zusammenlaufen zu werden. So dass es fixiert ein OUTPUT Wert total es.

Sie könnten versuchen, so etwas wie:

{!substitute(Case.Description, '\n', '<br/>')}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top