我有一个名为Current_Address__c的自定义字段,其数据类型为textarea。
我需要以下面的格式填充此字段。即街道后面的换行符和拉链后的另一个换行符。
街道 邮政编码 国家
城市州拉链国家/地区的价值取自联系对象。我不想将它用作公式字段。所以我需要在我的控制器中填充它并将其显示在我的VF页面上。
我正在尝试使用下面的代码添加换行符
this.customobj.Current_Address__c = currentStreet + '\\n ' + currentCity + ' ' + currentState + ' ' + currentZIP + '\\n ' + currentCountry ;
我还使用\ n而不是\ n。
它仍然显示一行中的字段而不是3行
修改
我使用以下代码完成了这项工作。我会接受mathews的答案,因为它适用于outputfield。
currentAddress = currentStreet;
currentAddress += '\r\n';
currentAddress += currentCity + + ' ' + currentState + ' ' + currentZIP ;
currentAddress += '\r\n';
currentAddress += currentCountry;
仅当您使用+ =时才有效。 不知道为什么会发生这种情况
答案 0 :(得分:7)
我认为我发现了这个问题,你有两个转义字符斜杠(\\n
),但只需要一个,因为\n
中的斜杠不需要在此上下文中转义。
此外,Salesforce将新行保存为\r\n
。试试这个:
this.customobj.Current_Address__c
= currentStreet + ' \r\n'
+ currentCity + ' ' + currentState + ' ' + currentZIP + ' \r\n'
+ currentCountry;
将 <apex:outputfield>
与sObject字段一起使用时,此方法有效。
<apex:outputtext value="{!myCustomSObject__c.Address__c}"/>
如果您使用的是其他Visualforce组件,则无法使用。使用<apex:outputtext>
组件时,Visualforce在HTML中呈现新行,但HTML忽略新行。如果您使用<br/>
标记,Visualforce会将其呈现为<br/>
。
我能想出的最好的解决方案是渲染一个包含新行的变量(而不是sObject字段),使用禁用的<apex:inputtextarea>
。
<apex:inputtextarea value="{!myAddress}" disabled="true" readonly="true">
</apex:inputtextarea>
答案 1 :(得分:3)
最近我遇到了同样的问题,我想在一个新的行中渲染 我找到的解决方案就是这个,它有点棘手但是有效:
<apex:outputText value="{!SUBSTITUTE(JSENCODE(textVariableThanContainsNewLines), '\\n', '<br/>')}" escape="false"/>
答案 2 :(得分:0)
试试这个:
控制器
public List<String> getLetterLines() {
if (letterBody == null) {
return new List<String>();
}
return letterBody.split('\n');
}
VF页面:
<apex:repeat value="{!letterLines}" var="letterLine">
<apex:outputText value="{!letterLine}" /><br />
</apex:repeat>
玩得开心!
答案 3 :(得分:-3)
value =&#34;备注:{!SUBSTITUTE(JSENCODE(textVariableThanContainsNewLines),&#39; \ r \ n&#39;,&#39;
&#39;)}&#34;