かずきのBlog

C#やJavaやRubyとメモ書き

目次

Blog 利用状況

ニュース

わんくまBlogが不安定になったため、前に書いてたはてなダイアリーにメインを移動します。
かずきのBlog@Hatena
技術的なネタは、こちらにも、はてなへのリンクという形で掲載しますが、雑多ネタははてなダイアリーだけに掲載することが多いと思います。
コメント
プログラマ的自己紹介
お気に入りのツール/IDE
プロフィール
経歴
広告
アクセサリ

書庫

日記カテゴリ

[NetBeans][Java][VisualWebJSF]ヘッダーフラグメントのプロパティにアクセスする方法

JSFをちゃんとやってれば当たり前の事かもしれないけど、ページフラグメントのプロパティにアクセスする方法を・・・。

まず、適当にページフラグメントを作ってみた。
image

タイトルっぽいStaticTextとAlert(警告)コンポーネントを置いてみた。Alertコンポーネントは、typeプロパティの種類だけ用意してみた。
そして、各々のAlertコンポーネントのsummaryプロパティにバインドするためのプロパティをHeaderFragmentに用意する。

    private String errorMessage;
    private String warnMessage;
    private String infoMessage;
    private String successMessage;
    
    // getter/setterは省略

これで、プロパティに値が設定されるとメッセージが格好良く表示されるっていう寸法だ。
ただ、問題はページフラグメントを置いただけだと、このHeaderFragmentクラスにアクセスする手段は提供されないということだ。
今までは、泣く泣くメッセージグループコンポーネントで無愛想なメッセージを出していた。

さて、本題のHeaderFragmentにアクセスするにはは、HeaderFragmentを配置した管理ビーンで下のようにコーディングすればOK。

HeaderFragment headerFragment = (HeaderFragment) getBean(HeaderFragment.class.getSimpleName());

生のJSFのAPIを使って書くとすれば、こんな感じになる。

        FacesContext facesContext = FacesContext.getCurrentInstance();
        ELContext elc = facesContext.getELContext();
        Application application = facesContext.getApplication();
        ELResolver resolver = application.getELResolver();
        HeaderFragment headerFragment = (HeaderFragment) resolver.getValue(elc, null, HeaderFragment.class.getSimpleName());

要は、ページフラグメントとして作成したクラスもfaces-config.xmlに登録された、ただの管理ビーンなので普通に取得しちゃえばよかったというだけでした。

なので、下のような感じでfaces-config.xmlに追加されたページフラグメントを使う場合は

    <managed-bean>
        <managed-bean-name>HeaderFragment</managed-bean-name>
        <managed-bean-class>作成したヘッダーフラグメントのクラス</managed-bean-class>
        <managed-bean-scope>request</managed-bean-scope>
    </managed-bean>

こんな感じでfaces-config.xmlを使ってDIしてやるのもありっぽい。

        <managed-property>
            <property-name>何かのプロパティ</property-name>
            <value>#{HeaderFragment}</value>
        </managed-property>

Visual Web JSFのプロジェクトでfaces-config.xmlを生でいじるのはどうだろう?という感じもするけど、時と場合によっては有効だろう。
個人的には、下のようなユーテリティクラスを作ってお茶を濁すかな。

package com.wankuma.kazuki.jsf.utils;

import javax.faces.application.Application;
import javax.faces.context.FacesContext;

/**
 * VisualWeb JavaServer Facesプロジェクトの管理ビーンで使うユーテリティクラス。
 * @author Kazuki
 */
public final class MBeanUtils {
    private MBeanUtils() {}
    
    /**
     * faces-config.xmlに定義されたクラスの中から引数で指定したクラスのインスタンスを取得する。
     * @param <T> 取得するクラスの型
     * @param clazz 取得するクラス
     * @return faces-config.xmlに定義されたクラスのインスタンス
     */
    @SuppressWarnings("unchecked")
    public static <T> T getBean(Class<T> clazz) {
        FacesContext fc = FacesContext.getCurrentInstance();
        if (fc == null) {
            throw new IllegalStateException("FacesContextが取得できませんでした");
        }
        Application app = fc.getApplication();
        return (T) app.getELResolver().getValue(fc.getELContext(), null, clazz.getSimpleName());
    }
}

因みに、実験で作ったアプリの実行画面は下のような感じ。
image

上の絵は全部出してやんよ!ボタンを押したときのものです。
個別のボタンを押すと、そのメッセージだけ表示されます。

投稿日時 : 2008年5月26日 0:12

Feedback

# welded ball valve 2012/10/19 1:15 http://www.dwkvalve.com/product_cat_list/Full-Weld

I like this post, enjoyed this one thanks for putting up. "To affect the quality of the day that is the art of life." by Henry David Thoreau.

# Supra Skytop 2012/12/07 18:30 http://supratkstore.webs.com/

Thankyou for helping out, superb info .

# longchamp bag outlet 2012/12/14 23:07 http://www.longchampbagoutlet.info/category/longch

It's O . K .. You can be a video hosting sites star =)

# longchamp pliage outlet 2012/12/15 16:11 http://www.soldesacslongchamp.info/category/sacs-l

make them all red having a yellow pony!!

# sac burberry soldes 2012/12/16 4:56 http://www.sacburberryecharpe.fr/category/sac-burb

This can be described as really wonderful site article, im delighted I stumbled onto it.

# エルメスbrikin販売 2012/12/16 22:21 http://www.hermespairs.info/category/エルメスバーキン

gripping avenues of suggestions bursting from your photos.

# sac longchamps 2012/12/17 8:27 http://www.longchampfr.info/category/longchamp-pas

We found a great many great DVDs that many of us were excited to look out again. Over the length of a couple of months.

# burberry london 2012/12/17 21:33 http://www.burberryuksale.org/category/burberry-sa

I trust the overpriced garbage opinion. I dislike the start looking, sound or feel of the Beats.

# longchamps le pliage 2012/12/17 21:42 http://www.sacslongchamp2012.info/le-pliage-longch

I'm impressed by the standard of information with this website. There are a considerable amount of good solutions here.

# longchamp le pliage 2012/12/18 21:21 http://www.longchampfr.info/category/sac-longchamp

This is known as a really decent site posting, im delighted I stumbled upon it.

タイトル  
名前  
Url
コメント