[Salesforce][Visualforce]VisualforceのIFでエスケープ | Salesforceで開発したり

Salesforceで開発したり

Salesforce.comに触れ始めてからもう7年
当時から比べたら相当な進化を遂げている。
出来る事が増えた分、やり方を調べなきゃいけないので、日常と共にメモで残そうというお話。

例えば、VisualforceのIFのtrue/false時に表示させる結果値の中に
javaScriptの記載があって、 ' や " が入っている場合どうしようか、という話。

Javaとかだと、 AA'BB'C を文字列で表現しようと思ったら

String aabbc = "AA\'BB\'C";

の様に、\でエスケープすると思う。


Visualforceだと、上記のエスケープだと文法的には通るけど、表示が

AA\'BB\'C 

とかなって\が残ってしまう。


今回やりたいのは、主にjavaScript記述で文字列を扱う場合なので例えば

onclick="location.href='TestVisualforce';"

をIF分の中に入れたい。

さてさて、色々試してみたのだけど、うまくいかないので、変数で持たせることにした。

<apex:variable var="locationTestVar" value="location.href='TestVisualforce'" />

んで、IF条件でボタンのリンク先を設定した。

<input type="button" 
  value="{!IF(NOT(row.flg),'OK','NG')}" 
  onclick="{!IF(NOT(row.flg), locationTestVar,'')}" 
  class="{!IF(NOT(row.flg),'','btnDisabled')}" />

これで、row.flgがTrueの時は活性OKボタンでクリックで遷移
row.flgがFalseであれば、非活性NGボタンでクリック無視

になる。

エスケープに拘っていたら徹夜コースだったかもしれぬ!
柔軟に生きて行こうと思った。