Visualforce: convertir les retours chariot pour les sauts de ligne HTML dans un champ texte long

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

Question

Dans Salesforce, si je suis la liaison d'un champ de texte dans une page Visualforce, ce qui est une bonne façon de convertir les retours chariot dans le champ de texte dans les balises HTML <br/>?

par exemple. à partir de quelque chose comme ceci:

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

... si la description est longue avec beaucoup de retours chariot, comment puis-je HTML ifier?

(Je suppose que cela est une question assez facile, et je suis sûr que je pourrais google, mais pour obtenir la communauté Salesforce se passe ici je figure nous avons besoin de quelques questions faciles.)

modifier: (Bounty ajouté pour essayer de générer une certaine excitation)

Était-ce utile?

La solution

Essayez ceci:

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

L'utilisation des champs de sortie maintiendra le formatage automagiquement.

Autres conseils

J'ai finalement été obtenu avec un code de longue haleine.

Dans le contrôleur personnalisé, ajouter des méthodes pour retourner le champ après la recherche manuelle et remplacer les sauts de ligne dans le domaine et les remplacer par les balises <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/>');
}

Ensuite, dans la page, utilisez le sommet: outputText avec évasion = "false":

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

Notez que la fuite = « false » est nécessaire pour empêcher Visualforce de se soustraire aux balises HTML. Cela signifie également que vous vous laisser ouvert à script-attaques qui pourraient par hypothétiquement intégrées dans les données. Cest pourquoi le lineBreaks() fn dans le contrôleur remplace également tous les caractères < et >.

(Il peut y avoir une meilleure façon de faire la chaîne en sécurité, suggestions bienvenues)

TehNrd ci-dessus répond à la question pour moi.

Je développe une vue de cas similaires à onglets à l'exemple commun pour les comptes. Quand il vient de montrer le cas, vous ne pouvez pas les mettre des commentaires dans une liste connexe et au lieu que vous devez les formater à la main. En utilisant les résultats apex standards pageBlockTable dans une table bien remplie qui ne peut pas être lu par les utilisateurs que nous devons faire plus le codage manuel. Cette approche me permet également d'utiliser les CSS pour formater le contenu de la table. Mais le problème a été le formatage CHRONIQUES avec des sauts de ligne et des messages électroniques formatés. La réponse de TehNrd a parfaitement fonctionné!

Pour d'autres ici est le code pour afficher un onglet avec CaseComment mis en forme avec une action pour modifier le commentaire.

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

Avez-vous essayé d'utiliser outputText?

Si cela ne fonctionne pas voter pour mon idée ici: https: // sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 Comme je l'ai le même problème en essayant de revenir JSON à une page.

D'autres personnes veulent aussi cette idée https://sites.secure .force.com / IdeaExchange / sommet / ideaview? id = 08730000000BrhEAAS

Pour moi, TehNrd clouée - je tentais d'afficher un cas « Description » dans un modèle e-mail de notification Visualforce, et tous les CR / lignocellulosiques ont disparu et les lignes / paragraphes obtenions courir ensemble. En fait une valeur OutputField totalement réparée.

Vous pouvez essayer quelque chose comme:

{!substitute(Case.Description, '\n', '<br/>')}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top