В 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-ify это?
(Я предполагаю, что это - довольно легкий вопрос, и я уверен, что мог погуглить его, но получить сообщество Salesforce, продолжающее здесь, я полагаю, что нам нужны несколько легких вопросов.)
править: (Щедрость, добавленная, чтобы попытаться генерировать некоторое волнение)
Попробуйте следующее:
<apex:outputField value="{!case.Description}"/>
Использование полей вывода автоматически поддерживает форматирование.
Вы пробовали использовать outputText?
ЕСЛИ это не работает, проголосуйте за мою идею здесь: https://sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 {{ 1}} У меня такая же проблема при попытке вернуть JSON на страницу.
Другие люди тоже хотят эту идею https://sites.secure.force.com/ideaexchange/apex/ideaview?id=08730000000BrhEAAS
В конце концов я добился этого с помощью длинного кода.
В настраиваемом контроллере добавьте методы для возврата поля после поиска вручную и замените разрывы строк в поле и замените их тегами
:
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 с escape = "false":
<apex:outputText value="{!CaseDescriptionFormatted}" escape="false" />
Обратите внимание, что escape = "false" необходимо, чтобы VisualForce не экранировал теги html. Это также означает, что вы подвергаетесь атакам с использованием сценариев, которые гипотетически могут быть встроены в данные. Вот почему lineBreaks ()
fn в контроллере также заменяет любые символы <
и >
.
(Возможно, существует лучший способ обезопасить строку, предложения приветствуются)