5

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

例如从这样的事情开始:

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

...如果描述很长并且有很多回车符,我该如何对它进行 HTML 化?

(我想这是一个相当简单的问题,我确信我可以用谷歌搜索它,但要让 Salesforce 社区在这里继续下去,我认为我们需要一些简单的问题。)

编辑:(添加赏金以尝试产生一些兴奋)

4

6 回答 6

6

试试这个:

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

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

于 2010-04-01T22:30:51.107 回答
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" />

请注意,为了防止 VisualForce 转义 html 标签,必须使用 escape="false"。这也意味着您让自己对假设嵌入数据中的脚本攻击持开放态度。这就是为什么lineBreaks()控制器中的 fn 也替换任何<>字符的原因。

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

于 2010-04-28T10:04:34.567 回答
1

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

我正在开发一个类似于 Accounts 的常见示例的 Cases 选项卡式视图。在显示案例评论时,您不能只将它们放入相关列表中,而是需要手动格式化它们。使用标准的 apex 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>
于 2011-06-11T16:02:25.097 回答
0

您是否尝试过使用 outputText?

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

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

于 2010-04-10T08:04:33.713 回答
0

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

于 2010-08-20T03:57:28.753 回答
-1

您可以尝试以下方法:

{!substitute(Case.Description, '\n', '<br/>')}
于 2010-08-04T19:09:42.310 回答