MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > シーケンスへのデータはめ込み | << | >> |
本節では、
PageMixer における HTML ページへのデータのはめ込み方に関して説明します。
説明には、
HTML ページの
"<span>
" および対応する
"</span>
"
に挟まれた部分にユーザ名文字列をはめ込むフィルタを用います。
<span class="Auth-UserName"></span>
<span class="Auth-UserName">foozy</span>
本節におけるクラス図を以下に示します。
色づけされているのが本節で定義するクラスで、 それ以外は PageMixer において定義済みです。
本節におけるオブジェクト図を以下に示します。
本節におけるシーケンス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
表記 | 完全名 |
---|---|
ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
HTMLSymbolSet | jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet |
SequenceDataInsetFilter | jp.ne.dti.lares.foozy.pagemixer.mixer.SequenceDataInsetFilter |
SequenceWatcher | jp.ne.dti.lares.foozy.pagemixer.mixer.SequenceWatcher |
TokenDataInsetFilter | jp.ne.dti.lares.foozy.pagemixer.mixer.TokenDataInsetFilter |
TokenWatcher | jp.ne.dti.lares.foozy.pagemixer.mixer.TokenWatcher |
表記 | 完全名 |
---|---|
Bootstrap | pagemixer.filter.Bootstrap |
UsernameTextInsetFilter | pagemixer.filter.UsernameTextInsetFilter |
SequenceWatcher
の生成前述のように、
本節では、
HTML ページの
"<span>
" および対応する
"</span>
" に挟まれた部分に、
ユーザ名文字列をはめ込むフィルタを作成します。
しかし、
与えられた HTML ページの該当する部分全ての位置にはめ込むのは、
得策ではありません。
そこで、対象となる部分シーケンスに以下の条件を定めます。
span
" 開始/終了タグに挟まれており、
class
" 属性を持っており、
Auth-UserName
" であること
このような場合、
"SequenceWatcher
" としては
"SequenceWatcher.NameAttr
" が利用されます。
これは "最初の Token の名前と属性で監視するシーケンス監視クラス"
のことです。
new SequenceWatcher.NameAttr(HTMLSymbolSet.SET.SPAN, HTMLSymbolSet.SET.CLASS, "Auth-UserName")
SequenceDataInsetFilter
の具象化PageMixer フレームワークは、
コンストラクタに与えられた SequenceWatcher
によって認識された部分シーケンスの替わりにデータをはめ込むための、
テンプレートとなるユーティリティクラスとして、
SequenceDataInsetFilter
およびその派生クラスを提供しています。
本節における状況の場合、
以下の理由から、
"HTML-Safe" な TextToken
としてデータをはめ込む必要があります。
この場合、
"SequenceDataInsetFilter.HTMLSafeTextInside
"
を利用するのが良いでしょう。
public class UsernameTextInsetFilter
extends SequenceDataInsetFilter.HTMLSafeTextInside
{
final static
private HTMLSymbolSet SET = HTMLSymbolSet.SET;
final static
private String ATTR_VALUE = "Auth-UserName";
////////////////////////////////////////
public UsernameTextInsetFilter(Object key){
super(new SequenceWatcher.NameAttr(SET.SPAN,
SET.CLASS,
ATTR_VALUE),
key);
}
/////////////////////////////////////////////
// class HTMLSafeTextInside の具象化
protected String getText(Object data){
return (null != data ? data.toString() : "");
}
}
"Token へのデータはめ込み" の例との違いは、以下の通りです。
TokenDataInsetFilter
かSequenceDataInsetFilter
か
TokenWatcher
かSequenceWatcher
か
以上で必要なものが全て揃いました。 実行コードは以下のようになります (詳細は UsernameTextInsetFilter を参照してください)。
try{ // ユーザ名設定/取得用のキー final Object key = "Auth.Login"; // ユーザ名 final String name = "foozy"; Bootstrap bootstrap = new Bootstrap.Default(filename) { protected void prepare(ConsumerContext context) { // ユーザ名をコンテキストに設定 context.setValue(key, name); } }; // フィルタの適用 bootstrap.execute(new UsernameTextInsetFilter(key)); } catch(Exception e){ e.printStackTrace(System.err); }
入力用のサンプル HTML ファイルは、
配布物中の "src/demo/servlet/war/WEB-INF/page/demosite
"
配下にある
"auth.ja.html
"
(あるいは "index.ja.html
" でも可)です。
MAP | PageMixer ドキュメント > チュートリアル > PageMixer の利用 > シーケンスへのデータはめ込み | << | >> |