在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添加试图产生一些兴奋)
答案 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)
我正在开发一个类似于帐户常见示例的标签视图。在显示案例评论时,您不能将它们放入相关列表中,而是需要手动格式化它们。使用标准的顶点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值完全修复它。