[mayaa-user:871] PathAdjusterの挙動について

Susumu ISHIGAMI [E-MAIL ADDRESS DELETED]
2009年 12月 12日 (土) 13:39:49 JST


お世話になっております。
石上です。

たびたび質問をしてしまって申し訳ありません。

PathAdjusterの挙動についてお尋ねしたいのですが、
当方の構成が少々複雑になってしまっています。
順に説明させていただきますが、長くなってしまって申し訳ないです。
質問するか迷ったのですが、Mayaaの今後の開発の参考になればという思いで投稿します。

さて、私が今関わっている案件では、
PathAdjusterを独自にカスタマイズしています。
org.seasar.mayaa.provider.ServiceProvider
<provider>
    <pathAdjuster class="mycompany.MyPathAdjuster">
        <parameter name="enabled" value="true"/>
        <parameter name="force" value="true"/><!-- since 1.1.13 -->
    </pathAdjuster>
</provider>
ここで、force=trueとしています。

このとき、PathAdjusterによる調整は、テンプレートをパースする1回だけしか行われないようです。
つまり、
public class MyPathAdjuster extends PathAdjusterImpl {
	@Override
	public String adjustRelativePath(String base, String path) {
			String result = super.adjustRelativePath(base, path);
			// 何らかの処理
			return result;
		}
	}
}
としてしまうと、一回「// 何らかの処理」によって確定したresultを
その後の画面で使い回してしまいます。

しかし、これでは要件を満たしません。
そこで、リクエストごとに、${...}を表記を利用して、JavaScriptに委譲しています。
つまり、「// 何らかの処理」をstaticメソッドへ移動後、以下の記述をしています。
public String adjustRelativePath(String base, String path) {
	String result = super.adjustRelativePath(base, path);
	result = result.replace("\"", "\"\"");
	result = result.replace("}", "&#125");
	return "${Packages.mycompany.MyPathAdjuster.something(\"" + result + "\")}";
}

public static String something(String path) {
	// 何らかの処理
	return result;
}
これで大半の問題はクリアなのですが、ひとつだけ困った問題があります。
ここからが質問です。

テンプレート側での相対パスでは期待通りなるのですが、
mayaaファイルに記述した動的な要素に関してもPathAdjusterが働きます。
<m:echo m:id="SOME_IMAGE">
	<m:attribute name="src" value="${getSomeImage()}" />
</m:echo>

その結果、m:idに紐付けられたimgタグのsrc属性は、実行時には以下のようになってしまいます。
<img src="${Packages.mycompany.MyPathAdjuster.something(\"" + result + "\")}" />

このように、${...}の部分を再展開してくれません。
この挙動は仕様でしょうか?

動的な要素に関してはプログラムでどうにできるので、
必ずしも自動調整は必要ではありません。

むしろ働かないようにしたいです。
PathAdjusterで、テンプレート側から呼ばれたのか、mayaaファイルから呼ばれたのか
制御できても良いと思います。isOnTemplate()は違うようですね?

あるいはテンプレートのように、${...}部分を展開してくれるとありがたいと思います。

以上、簡単に対応できることではないかもしれませんが、
将来のバージョンでサポートされることを期待します。


mayaa-user メーリングリストの案内