Visualforce: converter o transporte retorna para os quebras de linha HTML em um longo campo de texto

StackOverflow https://stackoverflow.com/questions/2525707

Pergunta

No Salesforce, se estou vinculando um campo de texto em uma página do Visualforce, qual é uma boa maneira de converter os retornos do carro no campo de texto em HTML <br/> Tag?

por exemplo, começando de algo assim:

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

... Se a descrição é longa com muitos retornos de carruagem, como faço para isso?

(Acho que essa é uma pergunta bastante fácil, e tenho certeza de que poderia pesquisar no Google, mas para fazer com que a comunidade do Salesforce continue aqui, acho que precisamos de algumas perguntas fáceis.)

Editar: (Bounty adicionado para tentar gerar alguma emoção)

Foi útil?

Solução

Experimente isso:

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

O uso de campos de saída manterá a formatação automaticamente.

Outras dicas

Acabei conseguindo isso com algum código longo.

No controlador personalizado, adicione métodos para retornar o campo depois de pesquisar manualmente e substituir as quebras de linha no campo e substituí -las por <br/> Tag:

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/>');
}

Então, na página, use o Apex: OutputText com Escape = "false":

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

Observe que Escape = "false" é necessário para impedir que o Visualforce escape das tags HTML. Isso também significa que você se deixa aberto a ataques de scripts que poderiam por hipoteticamente incorporados nos dados. É por isso que o lineBreaks() FN no controlador também substitui qualquer < e > personagens.

(Pode haver uma maneira melhor de tornar a corda segura, sugestões são bem -vindas)

Tehnrd acima respondeu à pergunta para mim.

Estou desenvolvendo uma visualização com guias de casos semelhantes ao exemplo comum de contas. Quando se trata de mostrar os comentários do caso, você não pode apenas colocá -los em uma lista relacionada e, em vez disso, precisa formatá -los manualmente. Usando os resultados padrão do APEX PageBlockTable em uma tabela bem embalada que não pode ser lida pelos usuários, para que tenhamos que fazer mais codificação manual. Essa abordagem também me permite usar o CSS para formatar o conteúdo da tabela. Mas o problema foi formatar os comentários do caso com quebras de linha e mensagens de email formatadas. A resposta de Tehnrd funcionou perfeitamente!

Para outros, aqui é o código para exibir uma guia com casos de casos formatados, juntamente com uma ação para editar o comentário.

<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>

Você já tentou usar o outputText?

Se isso não funcionar, vote na minha ideia aqui: https://sites.secure.force.com/ideaexchange/idevieview?id=08730000000H4XDAA0Como tenho o mesmo problema ao tentar devolver o JSON a uma página.

Outras pessoas também querem essa ideia https://sites.secure.force.com/ideaexchange/apex/ideAview?id=08730000000BRheaas

Para mim, Tehnrd acertou-eu estava tentando exibir um caso "Descrição" em um modelo de e-mail de notificação do Visualforce, e todos os CR / LFs desapareceram e as linhas / parágrafos estavam sendo executadas juntas. Tornando -o um valor de campo de saída totalmente corrigido.

Você poderia tentar algo como:

{!substitute(Case.Description, '\n', '<br/>')}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top