function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Kentaro OkanoKentaro Okano 

カスタムコンポーネント呼び出し元画面からのカスタムコンポーネントクラス内のメソッド呼び出しについて

いつもお世話になっています。岡野と申します。

すみません、先日質問したばかりなのですがまたご相談に乗っていただきたく思います。

 

現在、下記のサイトを参考にjQueryUIを利用してダイアログの機能を実現しようとしています。

http://techblogjp.appirio.com/2011/09/visualforce.html

 

現在作成しようとしているダイアログは、呼び出し元のDTOの内容によって初期表示時の画面内容が動的に変化します。

そのため下記のように実装してみたのですが、ダイアログ画面が再描画されません。

 

・ダイアログカスタムコンポーネントクラス

-中略-

public Pagereference init() {

   // DTOの内容を元に初期処理

   return null;

}

 

・ダイアログカスタムコンポーネントページ

-中略-

<apex:actionFunction name="init" action="{!init}" rerender="b_comp" />  // ダイアログの初期処理を行うactionFunction

 

ダイアログカスタムコンポーネント呼び出し元ページ

-中略-

<script>

function showDIalog() {

   init();   // ダイアログカスタムコンポーネント内のactionFunctionを呼び出し

   dispDialog();   // 呼び出し元画面のダイアログ領域を再描画させるactionFunction

   j$('#dialog').dialog('open');   // ダイアログ表示

}

</script>

 

上記を実行すると、ダイアログ画面は表示されますがどうやらinitメソッドが実行されていないらしく、デバッグログにも実行された形跡は見当たりません。しかしダイアログカスタムコンポーネント内でinitメソッドを実行すると正常に動作します。

この事からカスタムコンポーネント呼び出し元からはカスタムコンポーネントのactionFunctionを呼び出すことは出来ないと見えるのですが、解決策や回避策に心当たりがある方はいらっしゃらないでしょうか?

 

以上、よろしくお願いいたします。

Best Answer chosen by Admin (Salesforce Developers) 
Kentaro OkanoKentaro Okano

申し訳ありません。自己解決しました・・・。

ダイアログボックスを表示するjavaScriptのメソッドは実はオーバーロードしたものが複数あり、自分が試していたのは呼び出されていない方でした。

呼び出された方でカスタムコンポーネントのactionFunctionを実行すると、正常に再レンダリングされることを確認しました。

確認が足らず自分の勘違いでご質問してしまい、申し訳ありませんでした。