Yuta's Weblog

All | Personal | Sun
« Shale Remoting と JSF... | メイン | Java BluePrints AJAX... »

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 三つのコーディングが必要です。
Trackback URL: http://blogs.sun.com/yuta/entry/shale_remoting_%E3%81%A8_jsf_%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%881
投稿されたコメント:

コメント

名前
メール
URL

投稿されたコメント

HTML文法 不許可

Valid HTML! Valid CSS!

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