5

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 化するにはどうすればよいですか?

(これはかなり簡単な質問だと思います。Google で検索できると思いますが、ここで Salesforce コミュニティを活性化するには、いくつかの簡単な質問が必要だと思います。)

編集:(興奮を生み出すために賞金が追加されました)

4

6 に答える 6

6

これを試して:

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

出力フィールドを使用すると、フォーマットが自動的に維持されます。

于 2010-04-01T22:30:51.107 に答える
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/>');
}

次に、ページで、escape="false" を指定して apex:outputText を使用します。

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

VisualForce が html タグをエスケープしないようにするには、escape="false" が必要であることに注意してください。これは、仮想的にデータに埋め込まれている可能性のあるスクリプト攻撃にさらされていることも意味します. そのためlineBreaks()、コントローラーの fn も文字<>文字を置き換えます。

(文字列を安全にするためのより良い方法があるかもしれません。提案を歓迎します)

于 2010-04-28T10:04:34.567 に答える
1

上記の 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>
于 2011-06-11T16:02:25.097 に答える
0

outputText を使ってみましたか?

ここで私のアイデアに投票しない場合: https://sites.secure.force.com/ideaexchange/ideaView?id=08730000000H4XDAA0 JSON をページに返そうとすると同じ問題が発生するためです。

他の人もこのアイデアを望んでいます https://sites.secure.force.com/ideaexchange/apex/ideaview?id=08730000000BrhEAAS

于 2010-04-10T08:04:33.713 に答える
0

私にとって、TehNrd はそれを釘付けにしました -- VisualForce 通知電子メール テンプレートにケースの「説明」を表示しようとしていたところ、すべての CR/LF が消え、行/段落が一緒に実行されていました。それを OutputField 値にすることで完全に修正されました。

于 2010-08-20T03:57:28.753 に答える
-1

次のようなものを試すことができます:

{!substitute(Case.Description, '\n', '<br/>')}
于 2010-08-04T19:09:42.310 に答える