Mayaaで外部JavaScriptファイルをブラウザキャッシュさせないようにする

開発時に外部JavaScriptファイルをブラウザキャッシュさせないようにしたい。
そのためにサーバーサイドでJSファイルのパスにクエリーストリングでタイムスタンプをつける。

<script src="/js/jquery-1.5.min.js" type="text/javascript"></script>
<script src="/js/hoge.js" type="text/javascript"></script>
<script src="/js/fuga.js" type="text/javascript"></script>

↓これを以下のように書き換える。

<script src="/js/jquery-1.5.min.js?1297159104247" type="text/javascript"></script>
<script src="/js/hoge.js?1297159104247" type="text/javascript"></script>
<script src="/js/fuga.js?1297159104247" type="text/javascript"></script>


■ 実装方法

Mayaaファイル

<m:beforeRender>
	<![CDATA[
		var QNameImpl =
			Packages.org.seasar.mayaa.impl.engine.specification.QNameImpl;

		function getHtmlAttribute(htmlNode, name) {
			var attr = htmlNode.getAttribute(
				QNameImpl.getInstance(htmlNode.QName.namespaceURI, name));
			if (attr != null) {
				return attr.value;
			}
			return undefined;
		}

		function getTime() {
			return new Date().getTime();
		}
	]]>
</m:beforeRender>

<m:echo m:xpath="//script[@type='text/javascript']">
	<m:attribute name="src"
		value="${getHtmlAttribute(originalNode, 'src') + '?' + getTime()}"/>
</m:echo>

xpath で HTML上にあるすべてのスクリプトタグにマッチさせる。
マッチしたスクリプトタグの src 部分を取り出してクエリーストリングにUNIXタイムスタンプをつけたもので上書きする。

参考:
[mayaa-user:792] Re: mayaaプロセッサが当てられているタグ名を知りたい
http://ml.seasar.org/archives/mayaa-user/2009-May/000793.html

追記:
こっちのほうが簡単。srcで取れるのね。

外部jsの読み込みを強制 - 回り道日記@はてな
http://d.hatena.ne.jp/ko-suga/20110927/1317077856