Я в конце концов достиг этого с помощью длинного сложного кода.
В пользовательском контроллере добавьте методы для возврата поля после поиска вручную и замените разрывы строк в поле и замените их тегами <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 с escape = "false":
<apex:outputText value="{!CaseDescriptionFormatted}" escape="false" />
Обратите внимание, что escape = "false" необходимо для предотвращения экранирования html-тегов VisualForce. Это также означает, что вы оставляете себя открытым для сценариев-атак, которые могут быть гипотетически встроены в данные. Вот почему lineBreaks()
fn в контроллере также заменяет любые символы <
и >
.
(может быть лучший способ сделать строку безопасной, предложения приветствуются)