Yuta's Weblog

All | Personal | Sun
« 前の日(Mar月 31日, 2006年) | 日付別メイン | 次の日(Apr月 2日, 2006年) »

20060401 2006年 4月 01日 土曜日

Shale Remoting と JSF カスタムコンポーネント - その2
さて、じゃあ実際どうやるのかっていうと。。。まず Shale Remoting がやることは基本的に、内部の PhaseListener がリソースへのリクエストを managed bean の deferred メソッド(ところで deferred method ってなんていうんだろう? 遅延メソッド?)へ delegate するってことです。だからユーザはリクエストを実際のサーバ内部用にプロパゲートしたり とかいうコードを書く必要がなくなります。じゃあまずスタティックなリソースへのリクエストから:
これは超簡単。JSF のカスタムコンポーネントが複数集まったライブラリ jar の構造を思い浮かべてみてください。EJB jar みたいで、ejb-jar.xml の代わりに faces-config.xml と TLD ファイルが META-INF の下に入っているような感じです。スタティックなリソースは たぶん META-INF/resource-directory/yuta.js でしょう。これを取るには、コンポーネント中のレンダラーで↓みたくすればOK。

private static XhtmlHelper helper = new XhtmlHelper();

public void encodeEnd(FacesContext context, UIComponent component)
    throws IOException {
    
    ResponseWriter writer = context.getResponseWriter();

    //shale remoting resource retrieval
    helper.linkJavascript(context, component, writer,
        Mechanism.CLASS_RESOURCE, "/META-INF/r-dir/yuta.js");

出力された HTML を見てみると context root なんかが結合されたパスになってます。このリクエストが来ると Shale が自動的にリソースをとってくれます。
次はダイナミックリソース。
ダイナミックリソースというと、servlet が GET/POST リクエストでダイナミックな HTML を返すというのを思い浮かべますが、JSF のコンポーネントではおそらく Managed Bean のある特定のメソッドを使うのがいいと思います。 ダイナミックリソースの取得に Shale Remoting を使うにはレンダラ、faces-config.xml 、そしてリクエストを受け取る Managed Bean 三つのコーディングが必要です。

Valid HTML! Valid CSS!

This is a personal weblog, I do not speak for my employer.