- PR -

Strutsのtilesのワイルドカード

1
投稿者投稿内容
Lizua
会議室デビュー日: 2006/04/18
投稿数: 14
投稿日時: 2006-07-24 16:58
こんにちは。
現在StrutsのTilesのワイルドカードの箇所で苦戦をしております。

struts-config.xmlにワイルドカードのパラメータを渡し、
動的にJSPを変更する事はできたのですが

コード:
struts-config.xml 

<action path="/action*_*"
		type="typeAction"
		parameter="{1}_{2}"
		scope="request"
    	validate="false">
    <forward name="success" path="/WEB-INF/jsp/test_{1}_{2}.jsp" />
</action>



↑は正しくJSPを変更する事ができました。


上記のソースを以下のようにTilesを用いて
ワイルドカードでパラメータを渡そうと思いましたがうまく表示されません。

コード:
struts-config.xml 

<action path="/action*_*"
		type="typeAction"
		parameter="{1}_{2}"
		scope="request"
    	validate="false">
    <forward name="success" path="A_{1}_{2}" />
</action>

<plug-in className="org.apache.struts.tiles.TilesPlugin">
    <!-- Path to XML definition file -->
    <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml" />
    <set-property property="moduleAware" value="true" />
</plug-in>


tiles-defs.xml

<definition name="A_*_*" extends="adm.masterLayout">
	<put name="body" value="/WEB-INF/jsp/test_{1}_{2}.jsp" />
</definition>




Tilesを用いてワイルドカードを使用する方法を
どなたかご教授頂けたら幸いです。
キタキツネ
常連さん
会議室デビュー日: 2006/11/23
投稿数: 32
お住まい・勤務地: 沖縄県名護市
投稿日時: 2007-07-23 09:18
これは自分もまさにいまはまっているところですね。
回答がないところを見ると無理なのかな??
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-07-23 14:09
参考程度にしかなりませんが、
この前Tilesの無設定化にチャレンジしたときのことを書きます。

まず、TilesRequestProcessor#initDefinitionsMapping()をオーバーライドして、
tiles-def.xmlに基づく管理を行うDefinitionsFactoryを、
自前のDefinitionsFactoryのインスタンスに差し替えます。
こんな感じのコードになります。
コード:
public class MyRequestProcessor extends TilesRequestProcessor {

	/**
	 * @see org.apache.struts.tiles.TilesRequestProcessor#initDefinitionsMapping()
	 */
	protected void initDefinitionsMapping() throws ServletException {
		super.initDefinitionsMapping();
		final DefinitionsFactory original = this.definitionsFactory;
		definitionsFactory = new DefinitionsFactory() {

			private static final long serialVersionUID = -8325761699308319074L;

			public void destroy() {
				original.destroy();
			}

			public DefinitionsFactoryConfig getConfig() {
				return original.getConfig();
			}

			public ComponentDefinition getDefinition(String name,
					ServletRequest request, ServletContext context)
					throws DefinitionsFactoryException {
				//ここで挙動を変える
			}

			public void init(DefinitionsFactoryConfig config,
					ServletContext context) throws DefinitionsFactoryException {
				original.init(config, context);
			}

			public void setConfig(DefinitionsFactoryConfig config,
					ServletContext context) throws DefinitionsFactoryException {
				original.setConfig(config, context);
			}
		};
	}
}


オリジナルの定義を取得してから、個別の定義に差し替えるなどの処理を行えばよいかと思います。
自分の場合はイチイチ画面ごとにtiles-def.xmlを書かなくてもいいようにしました。
1

スキルアップ/キャリアアップ(JOB@IT)