Java > JavaEE > WebTier > ConfigJSF

巨大で複雑なアプリケーションをJSFで作る際に必要なタスク

  • アプリケーション全体がアクセスするバックエンドオブジェクトの登録
  • 管理ビーンとモデルビーンをページから参照したときに正しい値でインスタンス化するための設定
  • アプリケーションのページ遷移を実現するナビゲーションルールの定義
  • アプリケーションのパッケージング

Using Annotations to Configure Managed Beans

  • ビーンアノテーションを使ってJSFアプリケーションを設定する
  • @ManagedBeanをつけると管理ビーンとして登録される
  • 管理ビーンは(ビュー以外の)スコープをアノテーションで指定できる
  • faces-config.xmlで<faces-config>のmetadata-completeをtrueにすると、起動時にすべてのクラスのアノテーションがスキャンされる
  • アノテーションはコンポーネント、コンバータ、バリデータ、レンダラーに対しても利用可能

Using Managed Bean Scopes

  • ビーンに対して、保持されるスコープを設定できる
    • @ApplicationScoped:すべてのユーザのやりとりにわたって
    • @SessionScoped:複数回のHTTPリクエストにわたって
    • @ViewScoped:単一ページのやりとりにわたって
    • @RequestScoped:単一のHTTPリクエストにわたって
    • @NoneScoped:定義なし
    • @CustomScoped:ユーザ定義の非標準のスコープ
  • @NonScopedにするとビーンは参照されるたびにインスタンス化
  • 管理ビーンから参照される管理ビーンなどに使うといい
  • セッションやアプリケーションスコープにする場合は、ビーンをスレッドセーフにする
  • HTTPリクエスト中だけ存在すればいいなら、リクエストスコープ
  • ページ遷移するまで存在すればいいなら、ビュースコープ
  • 管理ビーンはリクエストが来た時にインスタンスが作られる(lazily)
  • アプリケーション起動時に、アプリケーションスコープの管理ビーンのインスタンスを作成できる(eager)
    • @ManagedBean(eager=true) + @ApplicationScoped

Application Configuration Resource File

  • アプリケーション設定ファイルはXML形式で、通常はfaces-config.xml
    <?xml version="1.0" encoding=’UTF-8’?>
    <faces-config version="2.0" xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd">
      ...
    </faces-config>
    
    • ローカライズされたメッセージや、遷移ルールなどの管理ビーンアノテーションで利用できないもの
    • 管理ビーンのアノテーション設定をうわがく設定
  • 設定ファイルは複数も可能で、ファイル参照は以下の通り
    • /WEB-INF/libまたは親クラスローダのJARの/META-INF/*faces-config.xml
      • バッケージングして利用する場合
    • コンテキスト初期化パラメータのjavax.faces.application.CONFIG_FILESでコンマ区切りで指定
      • 巨大なアプリケーションで複数の設定ファイルが必要な場合
    • /WEB-INF/faces-config.xml
      • シンプルなアプリケーションの場合
  • アプリケーションに登録された設定情報にアクセスするにはApplicationオブジェクトを使う
    • JSFがサーバ起動時にApplicationをインスタンス化

Ordering of Application Configuration Resource Files

  • アプリケーション設定ファイルが複数ある場合、ロード順が重要になることがある
  • faces-config.xmlの<absolute-ordering>で、ロード順を絶対指定する
    • <others>要素をつけない場合は、指定したファイルのみ有効
  • faces-config.xmlの<ordering>で、ロード順を相対指定する
    • <before>, <after>
    • <others>を設定すると、1番先や最後のロード順を指定できる
  • <ordering>がないものは、あるものよりも後にロード

Configuring Beans

  • ページが初めて管理ビーンを参照したときに、@ManagedBeanまたは設定ファイルによって初期化される
  • 管理ビーンの生成機能はアプリケーション設定ファイルの<managed-bean>で指定
    • 1つの設定ファイルに基づいて生成
    • ビーンプロパティを追加コードなしでカスタマイズ
    • ビーンが生成された時のビーンプロパティ値を設定ファイルで定義
    • <value>でビーンのプロパティをほかの値評価式から設定できる

Using the managed-bean Element

  • アプリケーション設定ファイルの<managed-bean>要素の内容で管理ビーンは初期化される
    • ページが管理ビーンを参照して、まだインスタンスがないとき
      <managed-bean>
        <managed-bean-name> UserNumberBean </managed-bean-name>
        <managed-bean-class>
          guessNumber.UserNumberBean
        </managed-bean-class>
        <managed-bean-scope> session </managed-bean-scope>
        ...
      </managed-bean>
      

Initializing Properties Using the managed-property Element

  • <managed-property>で初期値が必要なプロパティを設定する
  • <property-name>:プロパティ名
  • プロパティ値
    • <value>
    • <list-entries>
    • <map-entries>
    • <null-valu>

Referencing a Java Enum Type

  • プロパティ値にEnumを指定⇒<value>はEnum要素の文字列

Referencing an Initialization Parameter

  • プロパティ値に暗黙オブジェクトの参照を設定
    <value>#{initParam.defaultAreaCode}</value>
    

Initializing Map Properties

  • Mapのプロパティの初期化には<map-entries>を使う
    <map-entries>
      <key-class>int</key-class>
      <value-class>java.math.BigDecimal</value-class>
      <map-entries>
        <map-entry>
          <key>xxx</key>
          <value>yyy</value>
        </map-entry>
      </map-entries>
    </map-entries>
    

Initializing Array and List Properties

  • 配列やリストのプロパティの初期化には<list-entries>
    <list-entries>
      <value>xxx</value>
      <null-value/>
    </list-entries>
    

Initializing Managed Bean Properties

  • ほかの管理ビーンを参照するプロパティをもつ管理ビーンを初期化
    • ビーンの階層を作れる
    • <value>#{...}</value>
    • 参照先のオブジェクトのスコープは参照元より短くならないようにする
      • none -> none
      • application -> nome, application
      • session -> none, application, session
      • request -> none, application, session, request,view
      • view -> none, application, session, view

Initializing Maps and Lists

Registering CustomError Messages

  • コンバータやバリデータ向けのカスタムメッセージはアプリケーション起動時に利用可能にする
    • メッセージをFacesContext上にプログラムから登録する
    • アプリケーション設定ファイルにメッセージを定義する
      <application>
      	<resource-bundle>
      		<base-name>messages</base-name>
      		<var>messages</var>
      	</resource-bundle>
      	<locale-config>
      		<default-locale>ja</default-locale>
      	</locale-config>
      </application>
      

Using Faces Message to Create a Message

bundle = ResourceBundle.getBundle(basename, context.getViewRoot().getLocale());

Referencing Error Messages

  • ページ上ではメッセージを表示するために、<message>,<messages>タグを使う
    • 標準のコンバータやバリデータの標準エラーメッセージ
    • <esource-bundle>で登録されたメッセージ
  • コンバータやバリデータでキューイングされたエラーメッセージを上かける
    • converterMessage, requiredMessage, validatorMessage
    • 値はリテラル値または、ValueExpression
      • リソースは<resource-bundle>で定義したものか、ページで<f:loadBundle>で読み込む

Registering CustomLocalized StaticText

Using Default Validators

  • デフォルトバリデータはすべてのUIInputコンポーネントに適用され、ローカル定義されたバリデータの後に実行される

Configuring Navigation Rules

  • 遷移ルールは暗黙的、またはアプリケーション設定ファイルに明示的に設定できる
  • 明示的な設定
    • <navigation-rule>:ルール
      • <from-view-id>:遷移元(なしの場合は全ページが対象。*も利用可)
      • <navigation-case>:遷移のケースを実行するアクション(from-action)、結果(from-outcome)、遷移先(to-view-id)で指定

Implicit Navigation Rules

  • <navigation-rules>の設定がない場合に適用される
  • コンポーネントのアクション属性で遷移先を指定する

Basic Requirements of a JavaServer Faces Application

  • JSFアプリケーションの最小のWAR構成
    • web.xml
    • アプリケーション設定ファイル(faces-config.xmlなど)
    • JAR
    • クラス、JSFページ、イメージファイルなど

Configuring an ApplicationWith a Web Deployment Descriptor

  • web.xmlのJSF設定項目
    • JSFリクエストを扱うサーブレット
    • サーブレットマッピン
    • アプリケーション設定ファイル(デフォルト以外の場所に置きたいとき)
  • web.xmlのJSF設定項目(オプション)
    • コンポーネントの状態が保存される場所
    • クライアントに暗号化された状態を保存
    • クライアントに圧縮した状態を保存
    • ページへのアクセス制限
    • XML検証を有効にするか
    • プロジェクトステージの情報
    • カスタムオブジェクトの設定

Identifying the Servlet for Lifecycle Processing

  • JSFが実行されるためには、FacesServletが必要
    • リクエスト処理のライフサイクル管理と、リソースの初期化をする
      <servlet>
        <servlet-name>FacesServlet</servlet-name>
        <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>FacesServlet</servlet-name>
        <url-pattern>/faces/* </url-pattern>
      </servlet-mapping>
      
    • url-patternはパス指定(/faces/*)、拡張子指定(*.faces)が可能

Specifying a Path to an Application Configuration Resource File

  • アプリケーション設定ファイル(複数可能)がデフォルトの場所にないときまたは、faces-config.xmlという名前ではない時

Specifying a Path to an Application Configuration Resource File

Configuring Project Stage

Including the Classes, Pages, andOther Resources

最終更新:2012年09月12日 07:40
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。