JSF2.2入門 第13回パラメータ受け渡し コンテキストパラメータ


kanban13

katatsumuriパラメータの受け渡し方法 その1

JSFでは入力用、結果の表示用など複数のページでアプリケーションが構成されることが普通です。こういったページを移動するときに、どうやって情報を受け渡しするか、これはJSFのキーポイントです。まず1回目は「コンテキストパラメータ」です。

leafコンテキストパラメータ

コンテキストパラメータはサーブレットコンテキストという中に置くことができる情報保存場所のことです。

コンテキストは分かりにくいのですが文脈とか周辺環境という感じで、Webアプリケーション1つに対して1つのコンテキストが存在します。実行中のサーブレットから「ほら、あそこにあるあれに」といえばあうんの呼吸で「コンテキスト」を意味するような感じです。複数のサーブレットやJSFで使うことができる共用の場所みたいな。具体的にはServletContextクラスです。

そこに置くことができるパラメータをコンテキストパラメータといいます。

leafコンテキストパラメータを設定する

コンテキストパラメータは設定のみで書き込みはできません。設定するにはweb.xmlにパラメータ名と値を書きます。web.xlmはWebアプリケーションのプロジェクトで1つです。そのためここに書かれるコンテキストパラメーターはプロジェクト内のどのプログラムからもアクセス可能です。これが適する用途は「アプリケーションの初期値」「共通してよく使われる固定情報」です。

次はweb.xmlの例です。ここではパラメータが2つ設定してあります。1つ目は最初からNetBeansが書き込んだもの。2番目は私が今回追加したものです。<context-param>タグはパラメータ1個ごとに必要です。<param-name>はパラメータ名、<param-value>はパラメータ値です。

[web.xml]
<?xml version=”1.0″ encoding=”UTF-8″?>
<web-app....
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<context-param>
<param-name>companyname</param-name>
<param-value>株式会社五井物産</param-value>
</context-param>
<servlet>
・・・・

leafコンテキストパラメータを読み出す

コンテキストパラメータの読み出し方法です。つぎのサンプルでは4つの方法を示しています。どれも結果は同じです。

[ 方法1 ]

<h:outputText value=”#{initParam.companyname}”/>
これはJSFの暗黙オブジェクトinitParamを使っています。「暗黙オブジェクト.パラメータ名」というパターン。これが一番シンプルです。

[ 方法2 ]

<h:outputText value=”#{initParam[‘companyname’]}”/>
これもさっきと同じですがパラメータ名の指定がシングルクオーテーションになっています。あまり得なことはないかも。

[ 方法3 ]

<h:outputText value=”#{facesContext.externalContext.initParameterMap.companyname}”/>

これは暗黙オブジェクトを使わない場合の例。これもやる価値はないけど、一応こうもできるということです。

[ 方法4 ]
<h:outputText value=”#{facesContext.externalContext.initParameterMap[‘companyname’]}”/>

これも暗黙オブジェクトを使わず、シングルクオーテーションを使ったアクセス。これもメリットないが。

leafビーンからコンテキストパラメータ読み出し

次のようにマネージドビーンを作って、プロパティ mycompanynameにコンテキストパラメータを読み込むようにします。ビーンからコンテキストパラメータを読むのは太字の部分。FacesContext、ExternalContextとたどってからgetInitParameter(“companyname”)で取得できます。
@Named(value=”contextParamBean”)
@RequestScoped
public class ContextParamBean {
String mycompanyname;
public ContextParamBean() {
}
public String getMycompanyname() {
FacesContext context = FacesContext.getCurrentInstance();
ExternalContext exContext = context.getExternalContext();
mycompanyname=exContext.getInitParameter(“companyname”);
return mycompanyname;
}
}

JSFページ側はつぎのようにします。これは単にビーンのcompanynameを読んでいるだけです。2つの方法とも同じ結果になります。

<h:outputText value=”#{contextParamBean.mycompanyname}“/>
<h:outputText value=”#{contextParamBean[‘mycompanyname’]}“/>

これまでの方法全部の実行画面です。どれもOKですね。

inipara

previousnext

JSF2.2のすべてをまとめたkindle電子書籍 「JavaServer Faces2.2 入門」もぜひご覧ください。パソコン、iPhone、Androidどんな端末用にもamazonが無料のKindle電子書籍リーダーを用意しています。それをつかってKindle本を手軽にお楽しみください。あなたが今お使いの端末用Kidle電子書籍リーダーのご案内

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA