VisualForce:将回车符转换为长文本字段中的html换行符

时间:2010-03-26 18:20:37

标签: salesforce carriage-return visualforce

在Salesforce中,如果我将文本字段绑定到VisualForce页面,有什么方法可以将文本字段中的回车符转换为HTML <br/>标记?

e.g。从这样的事情开始:

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

...如果描述很长并且有很多回车符,那我该怎么做HTML-ify呢?

(我想这是一个相当简单的问题,我确信我可以谷歌,但为了让Salesforce社区继续进行,我想我们需要一些简单的问题。) < / p>

编辑:( Bounty添加试图产生一些兴奋)

6 个答案:

答案 0 :(得分:5)

试试这个:

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

使用输出字段将自动保持格式化。

答案 1 :(得分:3)

我最终用一些冗长的代码实现了这个目标。

在自定义控制器中,添加方法以在手动搜索后返回字段,并替换字段中的换行符并将其替换为<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/>');
}

然后在页面中,使用带有escape =“false”的apex:outputText:

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

请注意,必须使用escape =“false”来阻止VisualForce转义html标记。这也意味着您可以通过假设嵌入数据中进行脚本攻击。这就是为什么控制器中的lineBreaks() fn也会替换任何<>个字符。

(可能有更好的方法使字符串安全,建议欢迎)

答案 2 :(得分:1)

上面的TehNrd为我回答了这个问题。

我正在开发一个类似于帐户常见示例的标签视图。在显示案例评论时,您不能将它们放入相关列表中,而是需要手动格式化它们。使用标准的顶点pageBlockTable会导致用户无法读取的紧凑表格,因此我们必须进行更多的手动编码。这种方法还允许我使用CSS格式化表格内容。但问题是使用换行符和格式化的电子邮件格式化案例评论。 TehNrd的答案非常有效!

对于其他人,这里的代码是显示带有格式化CaseComment的标签以及编辑评论的操作。

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

答案 3 :(得分:0)

您是否尝试过使用outputText?

如果不起作用,请在此投票支持我的想法:https://sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 因为我在尝试将JSON返回到页面时遇到同样的问题。

其他人也想要这个想法https://sites.secure.force.com/ideaexchange/apex/ideaview?id=08730000000BrhEAAS

答案 4 :(得分:0)

您可以尝试以下方式:

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

答案 5 :(得分:0)

对我来说,TehNrd钉了它 - 我试图在VisualForce通知电子邮件模板中显示一个案例“描述”,所有CR / LF消失了,行/段落一起运行。使它成为OutputField值完全修复它。