MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > Token へのデータはめ込み | << | >> |
本節では、
PageMixer における
HTML タグ要素に対するデータのはめ込み方に関して説明します。
それを通して、はめ込む "自身のデータ" 入手に関して習得することになります。
説明には、
HTML ページの "input
" タグにおける "value
"
属性の値としてユーザ名文字列をはめ込むフィルタを用います。
<input name="Auth.UserName" value="">
<input name="Auth.UserName" value="foozy">
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。
本節におけるオブジェクト図を以下に示します。
本節におけるシーケンス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
表記 | 完全名 |
---|---|
ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
HashMapConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.HashMapConsumerContext |
HTMLSymbolSet | jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet |
ServletConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ServletConsumerContext |
Symbol | jp.ne.dti.lares.foozy.pagemixer.Symbol |
Token | jp.ne.dti.lares.foozy.pagemixer.Token |
TokenDataInsetFilter | jp.ne.dti.lares.foozy.pagemixer.mixer.TokenDataInsetFilter |
TokenWatcher | jp.ne.dti.lares.foozy.pagemixer.mixer.TokenWatcher |
表記 | 完全名 |
---|---|
Bootstrap.Default | pagemixer.filter.Bootstrap.Default |
UsernameAttrInsetFilter | pagemixer.filter.UsernameAttrInsetFilter |
TokenWatcher
の生成前述のように、
本節では
HTML ページの
"input
" タグにおける
"value
" 属性の値として、
ユーザ名文字列をはめ込むフィルタを作成します。
しかし、
実際のサービスを想像してみればわかるように、
与えられた HTML ページの全ての
"input
" タグにはめ込むのは、
得策ではありません。
そこで、対象となる Token
に以下の条件を定めます。
input
" であり、
name
" 属性の値が "Auth.UserName
" であること
このような場合、
TokenWatcher
としては
"TokenWatcher.NameAttr
" が利用されます。
これは "名前と属性とで監視する Token 監視クラス"
のことです。
new TokenWatcher.NameAttr(HTMLSymbolSet.SET.INPUT, HTMLSymbolSet.SET.NAME, "Auth.UserName")
本チュートリアルでは一度、 "Consumer Context" が、 値の設定/設定取り消し/取得の機能を提供することを説明しました。
しかし、これらの機能を利用するためには、
値を識別するための識別子オブジェクトを定義する必要があります。
Token
にはめ込むユーザ名文字列の、
設定/取得を行うための識別子オブジェクト(=鍵)は、
例えば以下のように定義されます。
Object key = "Auth.UserName";
実際のプロジェクトでは、 フィルタクラス群とデータ提供(ないし設定)クラス群の、 両方から見えるクラス(ないしインタフェース)において、 キー(群)を定義しておくのが便利です。
TokenDataInsetFilter
の具象化PageMixer フレームワークは、
コンストラクタに与えられた TokenWatcher
によって認識された Token
にデータをはめ込むための、
テンプレートとなるユーティリティクラスとして、
TokenDataInsetFilter
およびその派生クラスを提供しています。
本節における状況の場合、 以下の理由から、 "HTML-Safe" な属性値としてデータをはめ込む必要があります。
この場合、
"TokenDataInsetFilter.HTMLSafeAttr
"
を利用するのが良いでしょう。
public class UsernameAttrInsetFilter
extends TokenDataInsetFilter.HTMLSafeAttr
{
final static
private HTMLSymbolSet SET = HTMLSymbolSet.SET;
final static
private String ATTR_VALUE = "Auth.UserName";
////////////////////////////////////////
public UsernameAttrInsetFilter(Object keyUsername){
super(new TokenWatcher.NameAttr(SET.INPUT,
SET.NAME,
ATTR_VALUE),
keyUsername,
SET.VALUE);
}
////////////////////////////////////////
// class HTMLSafeAttr の具象化
protected String getValue(Object data){
return (null != data ? data.toString() : "");
}
}
TokenDataInsetFilter.HTMLSafeAttr
は、
3つの引数を必要とします。
最初の TokenWatcher
型引数に関しては説明は不要でしょう
(または前節を再読ください)。
次の Object
型引数は、
ConsumerContext
に格納された値を識別する識別子(鍵)として使用されます。
最後の Symbol
型引数は、
フィルタが値をはめ込む "はめ込み先属性" の名前として使用されます。
備考: Servlet API に依存したクラス群は、 PageMixer 3.0 版から他のクラス群から('servlet' パッケージへ)分離されました。 この分離により、 デモのソースファイル群も、 PageMixer の一般的な概念/原理を説明するものと、 Servlet 環境でのサービス構築方法を説明するものとに分割されました。
この分離によって、 いくつかのクラスが例えばキーの特定といった点で、 効率に定義されていないように見えるでしょう。
以上で必要なものが全て揃いました。 実行コードは以下のようになります (詳細は UsernameAttrInsetFilter を参照してください)。
try{ // ユーザ名設定/取得用のキー final Object key = "Auth.UserName"; // ユーザ名 final String name = "foozy"; Bootstrap bootstrap = new Bootstrap.Default(filename) { protected void prepare(ConsumerContext context) { // ユーザ名をコンテキストに設定 context.setValue(key, name); } }; // フィルタの適用 bootstrap.execute(new UsernameAttrInsetFilter(key)); } catch(Exception e){ e.printStackTrace(System.err); }
入力用のサンプル HTML ファイルは、
配布物中の "src/demo/servlet/war/WEB-INF/page/demosite
"
配下の
"auth.ja.html
"
(あるいは "index.ja.html
" でも可)
です。
Bootstrap.Default
クラスは、
"prepare(ConsumerContext)
" メソッドのオーバライドによって、
与えられたフィルタによる混ぜ合わせの前に、
"bootstrap
"
オブジェクトに上記処理を実行時に起動させることが出来ます。
MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > Token へのデータはめ込み | << | >> |