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>
そこで、以下のような HTML ページを生成しなければなりません。
<a href="/editRegistration?action=Create" >メールリーダーデモアプリケーションへの登録</a>
この 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 のはめ込み | << | >> |