こんにちは、アンダーソンです。
上級デベロッパーに向けて勉強中にapex:actionPollerなるものを見つけて
試したくてうずうずしたのでやってみたいと思います。
勉強したら知らないことがどんどん見つかって楽しいですね。。。
いやあ知識をもっとつけていかないとですね。
apex:actionPollerを使ったVF
まずこの機能をいつもの開発者ガイドからの引用を使ってみてみましょう。
指定した間隔に従って AJAX 要求をサーバに送信するタイマーです。各要求により、ページの全体または一部を更新できます。
Visualforce 開発者ガイド
ページ側で要求を送信するタイマー機能なるものだそうです。
ちなみに<apex:actionPoller> は作用するリージョン内にある必要があります。とのこと。
つまり、<apex:actionRegion>と使うことによって、コンポーネントに対してタイマー機能を使って
更新ができるようです。
実際に実装してみました。
VFのコードはこちらです。参考:Visualforce 開発者ガイド
<apex:page controller="PollerTest"> <apex:form> <apex:outputText value="Watch this counter: {!count}" id="counter"/ <apex:actionPoller action="{!incrementCounter}" reRender="counter" interval="5"/> </apex:form> </apex:page>
reRenderを指定して変更したいコンポーネントを指定しています。
intervalという属性に時間を指定することでその時間でポーリング処理がされます。
Apex側の処理
先ほどのコードのApex 側をみてみます。
public class PollerTest { Integer count = 0;public PageReference incrementCounter() {
count++;
return null;
}
public Integer getCount() {
return count;
}
}
この場合、5秒に1回incrementCounterメソッドが呼び出され、count変数に1が加算されていきます。
めちゃくちゃ簡単な実装ですが、かなり奥深いですね。
実際に業務で使うとなるとどのような場面になるでしょうか。
使い所
コールセンターや、問合せを管理しているなど、常に最新の状態に画面表示を保つ必要のある
業務ではある意味必須な機能なのかもしれません。
しかしながら、ベストプラクティスをみてみると、そこまで複雑な実装などをすると他のトランザクションに
影響を与えるとの記述もありました。
使い所は難しいですが便利機能なので覚えて置いて損はなさそうですね。
ちなみに代替案として<apex:actionFunction> コンポーネントと JavaScript Remoting の組み合わせが推奨されていました。
今度はそっちもやってみたいな〜。
コメント