So-net無料ブログ作成

SalesforceのVisualforceタグのreRender属性の注意点 [Salesforce]

SFアイコン.png

Salesforceの<apex:commandLink>または<apex:commandButton>タグのreRender属性を利用するにあたって、注意点がありますので紹介します。

reRender属性は、JavaScriptのAjaxを使って、HTTP通信でデータを取得してウェブページ内のHTMLの更新を行うというものです。
そのため、改行コードやタブなどの制御文字が半角スペースに変換されてしまいます。

例えば、Visualforce内で改行コードを<br>要素に書き換える処理を行っていた場合、reRender属性の処理が動いた後は改行コードが半角スペースに変換されているため、<br>要素に書き換えられません。

ソースコード

Visualforce
<apex:page controller="sampleController" id="page" action="{!getData}">    
    <apex:form id="form">
        <apex:commandButton value="reRender実行" action="{!getData}" reRender="temp"/><br/>
        実行結果:<pre><apex:outputText id="temp" value="{!text}"/></pre>       
    </apex:form>
</apex:page>
Apex
public class sampleController {
    public String text { get; set; }    
    public void getData() {
        text = '改行コード:\r\n\r\nタブ:\t'; 
   }
}

実行結果

「reRender実行」ボタンクリック前
image

「reRender実行」ボタンクリック後
image

ソース解説

このように改行コードやタブなどの制御文字が半角スペースに変換されてしまいます。
回避方法としては、reRenderの処理が必要な場合、改行コードやタブなどの制御文字を使わない。
あるいは、事前に独自のエスケープ文字を作成して置換処理をするというものが考えられます。

以上です。
nice!(0) コメント(0)
共通テーマ:資格・学び

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。
画像認証