2010-03-26 1 views
5

В Salesforce, если я привязываю текстовое поле к странице VisualForce, каков хороший способ преобразования возвратов каретки в текстовое поле в HTML <br/> теги?VisualForce: преобразование каретки возвращается к перерыву в html в длинном текстовом поле

например. начиная от чего-то вроде этого:

<apex:page standardController="Case"> 
    <apex:pageBlock title="Test"> 
     <p>{!case.Description}</p> 
    </apex:pageBlock>     
    <apex:detail relatedList="false" /> 
</apex:page> 

... если Описание долго с большим количеством возвратов каретки, как я HTML-римента это?

(я предполагаю, что это довольно простой вопрос, и я уверен, что я мог Google, но, чтобы получить сообщество Salesforce здесь происходит я полагаю, нам нужно несколько простых вопросов.)

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

ответ

4

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

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

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

+0

Это не работает для меня. Когда я использую outputField, возврат каретки не преобразуется. – codeulike

+0

Но, похоже, это работает для других людей! – codeulike

0

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

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

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

+0

outputText и outputField не работает для меня – codeulike

3

В конце концов я достиг этого с некоторым долго наматывается кодом.

В пользовательском контроллере, добавить методы, чтобы вернуть поле после ручного поиска и замены разрывов строк в поле и заменяя их <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/>'); 
} 

Затем на странице, используйте апекс: outputText с побег = «ложь»:

<apex:outputText value="{!CaseDescriptionFormatted}" escape="false" /> 

Обратите внимание, что побег = «ложь», необходимо, чтобы предотвратить Visualforce от побега HTML-теги. Это также означает, что вы оставляете себя открытым для сценариев-атак, которые могут быть гипотетически встроены в данные. Вот почему lineBreaks() fn в контроллере также заменяет любые символы < и >.

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

0

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

{!substitute(Case.Description, '\n', '<br/>')} 
0

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

1

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

Я разрабатываю табличный вид дел, аналогичный общему примеру для учетных записей.Когда дело доходит до показа комментариев к случаю, вы не можете просто поместить их в соответствующий список, и вместо этого вам нужно отформатировать их вручную. Использование стандартной вершины 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> 
+0

Обновление: действие редактирования работает только в том случае, если текущий пользователь владеет комментарием к случаю. Я работаю над решением и буду обновлять. – Bryan

Смежные вопросы