VisualForce: преобразуйте возвраты каретки в разрывы строки HTML в поле длинного текста

В 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, продолжающее здесь, я полагаю, что нам нужны несколько легких вопросов.)

править: (Щедрость, добавленная, чтобы попытаться генерировать некоторое волнение)

5
задан codeulike 30 March 2010 в 09:38
поделиться

3 ответа

Попробуйте следующее:

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

Использование полей вывода автоматически поддерживает форматирование.

5
ответ дан 14 December 2019 в 04:34
поделиться

Вы пробовали использовать outputText?

ЕСЛИ это не работает, проголосуйте за мою идею здесь: https://sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 {{ 1}} У меня такая же проблема при попытке вернуть JSON на страницу.

Другие люди тоже хотят эту идею https://sites.secure.force.com/ideaexchange/apex/ideaview?id=08730000000BrhEAAS

0
ответ дан 14 December 2019 в 04:34
поделиться

В конце концов я добился этого с помощью длинного кода.

В настраиваемом контроллере добавьте методы для возврата поля после поиска вручную и замените разрывы строк в поле и замените их тегами
:

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 в контроллере также заменяет любые символы < и > .

(Возможно, существует лучший способ обезопасить строку, предложения приветствуются)

3
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: