| MAP | PageMixer ドキュメント > チュートリアル > Struts 環境における利用 > URI のはめ込み | << | >> |
本節では、PageMixer において、
配置された Struts の "Action" に対応する URI を、
"a"、"img"、"form" あるいは
"link"
といった HTML タグ要素の属性値としてはめ込む方法を説明します。
本節におけるクラス図を以下に示します。
本チュートリアルでは、 クラスは全てクラス名のみで表記されています。 完全な名称は以下の通りです。
| Notation | Full name |
|---|---|
| ActionConfigKey | jp.ne.dti.lares.foozy.pagemixer.servlet.ActionConfigKey |
| ActionInsetFilter | jp.ne.dti.lares.foozy.pagemixer.struts.ActionInsetFilter |
| ConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.ConsumerContext |
| HTMLSymbolSet | jp.ne.dti.lares.foozy.pagemixer.HTMLSymbolSet |
| HashMapConsumerContext | jp.ne.dti.lares.foozy.pagemixer.mixer.HashMapConsumerContext |
| StrutsConsumerContext | jp.ne.dti.lares.foozy.pagemixer.struts.StrutsConsumerContext |
| Notation | Full name |
|---|---|
| Bootstrap | pagemixer.filter.Bootstrap |
| DummySetup | pagemixer.filter.DummySetup |
PageMixer フレームワークでは、
配置された Struts の "Action" の URI はめ込みに、
"ActionInsetFilter" の派生クラスが利用できます。
以下にしめす幾つかの派生クラスバリエーションが定義済みです。
a" タグのための ActionInsetFilter.A
img" タグのための ActionInsetFilter.IMG
form" タグのための ActionInsetFilter.FORM
link" タグのための ActionInsetFilter.LINK
上記クラスは既に具象クラスですので、 どの HTML タグに URI を埋め込むかを決めるだけです。
PageMixer 3.1 版以降では、
Action URI をはめ込みたくないタグに、
"nonaction" ないし
"external" 属性を
"true" 値で指定することで、
対象タグに対する上記のフィルタ群の
URI はめ込みを抑止することが出来ます。
これにより、 上記のフィルタ群をデフォルトコンストラクタで作成した上で、 はめ込みを HTML ソース側で制御することが出来ます。
本チュートリアルでは、
はめ込みと表現していますが、
ActionInsetFilter およびその派生クラスは、
実際には、
HTML ページ中で既に属性値が持っている URI 情報を、
その属性値によって関連付けられた
Action のための本当の
URI に変換しています。
そのため、
"struts-config.xml" ファイルの
("forward" 要素の)"path" 要素、
あるいは("action" 要素の)
"input" 要素と同じ値の属性値を指定しなければなりません。
例えば、
Struts の struts-mailreader における "index.jsp" には、
以下のようなコードが記述されています。
<html:link page="/editRegistration?action=Create" ><bean:message key="index.registration"/></html:link>
index.jsp(部分)そこで、以下のような HTML ページを生成しなければなりません。
<a href="/editRegistration?action=Create" >メールリーダーデモアプリケーションへの登録</a>
index.jsp
に対応する "index.ja.html"(部分)この HTML ソースは、 大変簡素で、且つ一般的な HTML エディタとの親和性が高いですよね?
URI はめ込み抑止の例を以下に示します。
<a href="static-page.html" nonaction="true" >非 Action(但し「内部」)資源へのリンク</a> <a href="http://pagemixer.sourceforge.net/index.ja.html" external="true" >外部資源へのリンク</a>
"nonaction" 属性は、
フィルタによる Action URI のはめ込みのみを抑止しますが、
一方で "external" 属性は、
URL リライティングによるセッション ID 保証も抑止します。
備考:
URL リライティングは外部サイトへの "REFERER" HTTP 経由でセッション
ID を漏洩させるかもしれないため、
"external" 属性はセキュリティ的には不十分です。
厳密なセキュリティのためには、 他のサイトへのユーザ誘導の際は HTTP リダイレクトを使用してください。
これ以外の Action URI はめ込みに関する
ActionInsetFilter の機能
(例えば "module" の指定)に関する詳細は、
API ドキュメントを参照してください。
ActionInsetFilter は、
"ConsumerContext" を
"ActionConfigKey" で検索することで、
Action へのパスを取得します。
StrutsConsumerContext を用いる場合、
特に明示的な準備をせずとも
"ActionConfigKey" は正しく機能します。
しかし、
"HashMapConsumerContext" や他の
ConsumerContext 実装を用いる場合、
対応する ActionConfig を明示的に格納する必要があります。
"DummySetup" クラスは、
ConsumerContext を
PageMixer - Struts 連携デモンストレーション
("src/demo/struts/war/WEB-INF" 配下の
"web.xml" および "struts-config.xml"
に記述されています)と同じ状態に設定します。
以上で必要なものが全て揃いました。
HTML ページ中の
"<a>" タグに、
"href" 属性値として
URI をはめ込む実行コードは以下のようになります。
Bootstrap bootstrap =
new Bootstrap.Default(filename){
protected void prepare(ConsumerContext context)
{
DummySetup.setup(context,
new String[0],
0);
}
};
ActionInsetFilter.A filter = new ActionInsetFilter.A();
bootstrap.execute(filter);
入力となるサンプル HTML ファイルは、
配布物の
"src/demo/struts/war/WEB-INF/page"
配下にあります。
上記例における "filename" 変数の値として、
サンプルファイルへのパスを指定してください。
HTMLページにおけるデータのはめ込みに関する詳細は、 "Token へのデータはめ込み" あるいは "PageMixer の利用" の他の節をご覧下さい。
| MAP | PageMixer ドキュメント > チュートリアル > Struts 環境における利用 > URI のはめ込み | << | >> |