VisualForce: преобразовать возврат каретки в html разрывы строк в длинном текстовом поле - PullRequest
5 голосов
/ 26 марта 2010

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

edit: (Bounty добавлен впопытаться создать некоторое волнение)

Ответы [ 6 ]

5 голосов
/ 02 апреля 2010

Попробуйте это:

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

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

3 голосов
/ 28 апреля 2010

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

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

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

1 голос
/ 11 июня 2011

TehNrd выше ответил на вопрос для меня.

Я занимаюсь разработкой вкладок, в которых отображается описание дел, аналогичное общему примеру аккаунтов. Когда дело доходит до отображения комментариев к делу, вы не можете просто поместить их в связанный список, а вместо этого вам нужно отформатировать их вручную. Использование стандартного apex pageBlockTable приводит к плотно упакованной таблице, которая не может быть прочитана пользователями, поэтому нам нужно больше ручного кодирования. Этот подход также позволяет мне использовать CSS для форматирования содержимого таблицы. Но проблема заключалась в том, что форматирование комментариев к случаю выполнялось с помощью разрывов строк и сообщений электронной почты. Ответ TehNrd сработал отлично!

Для других вот код для отображения вкладки с отформатированным 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>
0 голосов
/ 20 августа 2010

Для меня TehNrd прибил его - я пытался отобразить «Описание дела» в шаблоне электронной почты для уведомлений VisualForce, и все CR / LF исчезли, и строки / абзацы начали работать вместе. Сделав это значение OutputField полностью исправил его.

0 голосов
/ 04 августа 2010

Вы можете попробовать что-то вроде:

{!substitute(Case.Description, '\n', '<br/>')}
0 голосов
/ 10 апреля 2010

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...