Визуальная сила:преобразование возвратов каретки в html-переводы строк в длинном текстовом поле
-
22-09-2019 - |
Вопрос
В 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-формате?
(Я предполагаю, что это довольно простой вопрос, и я уверен, что мог бы погуглить его, но чтобы привлечь сюда сообщество Salesforce, я полагаю, нам нужно несколько простых вопросов.)
Редактировать:(Баунти добавлен, чтобы попытаться вызвать некоторое волнение)
Решение
Попробуй это:
<apex:outputField value="{!case.Description}"/>
Использование выходных полей автоматически сохранит форматирование.
Другие советы
В конце концов я добился этого с помощью некоторого длинного кода.
В пользовательском контроллере добавьте методы для возврата поля после ручного поиска и замените разрывы строк в поле и замените их на <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" необходим для предотвращения экранирования VisualForce html-тегов.Это также означает, что вы оставляете себя открытым для скриптовых атак, которые гипотетически могут быть встроены в данные.Вот почему lineBreaks()
fn в контроллере также заменяет любой <
и >
Персонажи.
(Возможно, есть лучший способ сделать строку безопасной, предложения приветствуются)
Технрд выше ответил на этот вопрос за меня.
Я разрабатываю представление обращений с вкладками, аналогичное обычному примеру для учетных записей.Когда дело доходит до отображения комментариев к обращению, вы не можете просто поместить их в связанный список, а вместо этого вам нужно отформатировать их вручную.Использование стандартной apex pageBlockTable приводит к получению плотно упакованной таблицы, которая не может быть прочитана пользователями, поэтому нам приходится больше кодировать вручную.Этот подход также позволяет мне использовать CSS для форматирования содержимого таблицы.Но проблема заключалась в форматировании комментариев к обращениям с помощью разрывов строк и форматирования сообщений электронной почты.Ответ Технрда сработал отлично!
Для других вот код для отображения вкладки с отформатированным комментарием 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>
Вы пробовали использовать outputText?
ЕСЛИ это не сработает, проголосуйте за мою идею здесь: https://sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 Поскольку у меня такая же проблема при попытке вернуть JSON на страницу.
Другие люди тоже хотят эту идею https://sites.secure.force.com/ideaexchange/apex/ideaview?id=08730000000BrhEAAS
Что касается меня, TehNrd справился с задачей - я пытался отобразить "Описание" обращения в шаблоне уведомления VisualForce по электронной почте, и все CR / LFS исчезли, а строки / абзацы были объединены.Придание ему значения OutputField полностью исправило это.
Вы могли бы попробовать что-то вроде:
{!substitute(Case.Description, '\n', '<br/>')}