代码之家  ›  专栏  ›  技术社区  ›  codeulike

visualforce:convert回车返回到长文本字段中的html换行符

  •  5
  • codeulike  · 技术社区  · 16 年前

    在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社区继续下去,我想我们需要一些简单的问题。)

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

    6 回复  |  直到 14 年前
        1
  •  5
  •   TehNrd    16 年前

    试试这个:

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

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

        2
  •  3
  •   codeulike    16 年前

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

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

    然后在页面中,使用apex:outputtext with escape=“false”:

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

    请注意,escape=“false”是防止visualforce转义html标记所必需的。这也意味着您可能会遭受脚本攻击,而脚本攻击可能会假设嵌入到数据中。这就是为什么 lineBreaks() 控制器中的fn还替换任何 < > 字符。

    (可能有更好的方法来保证绳子的安全,欢迎提出建议)

        3
  •  1
  •   Bryan    14 年前

    上面的泰恩德为我回答了这个问题。

    我正在开发一个选项卡式的案例视图,类似于帐户的常见示例。在显示案例注释时,您不能只是将它们放入相关列表,而是需要手动设置它们的格式。使用标准的apex pageblocktable会导致一个紧凑的表,用户无法读取,因此我们必须进行更多的手工编码。这种方法还允许我使用css格式化表内容。但问题是用换行符和格式化的电子邮件格式化案例注释。泰恩德的回答非常有效!

    对于其他人,这里是显示带有格式化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>
    
        4
  •  0
  •   Daveo    16 年前

    你试过使用outputtext吗?

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

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

        5
  •  0
  •   HartyeTech    15 年前

    你可以试试这样的方法:

    {!substitute(Case.Description, '\n', '<br/>')}
    
        6
  •  0
  •   Laurent Stanevich    15 年前

    对我来说,Tehnrd把它钉住了——我试图在VisualForce通知电子邮件模板中显示一个案例“描述”,所有的CR/LF都消失了,行/段落都在一起运行。使其成为outputfield值完全固定。

    推荐文章