あまり情報として出てきませんが、TapestryではJavaScriptも簡単に扱えます。
HTMLテンプレートにJavaScriptを書くこともできますし(Tapestry3ではできませんでした)、特定のコンポーネントを使用するときに自動的にJavaScriptを生成して出力したり、動的に出力内容を変更したりといったことも可能です。
簡単なJavaScriptであれば、HTMLテンプレートに、<script language=”JavaScript” type=”text/javascript” src=”general.js” ></script>等記述し読み込ませる。もしくは、そのままJavaScriptを記述することもできますが、状態により出力するJavaScriptを変更したいときに、コンポーネントとセットにしたJavaScriptテンプレートを使用します。
Tapestry3とTapestry4ではJavaファイルの書き方が異なりますが、それ以外のファイルは共通です。
Tapestry4でのJavaScriptテンプレートの扱い方について説明したいと思います。
以下に記述するのは、TagListコンポーネント内でJavaScriptを生成し、TagListコンポーネントが使用されているページが表示した時に、ダイアログを表示するサンプルです。ダイアログに表示する文字列は、TagListコンポーネント内で決定しています。

サンプルコード

-WEB-INF/jwc/TagList.script

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE script
PUBLIC "-//Apache Software Foundation//Tapestry Script Specification 3.0//EN"
"http://jakarta.apache.org/tapestry/dtd/Script_3_0.dtd">
<script>
<body>
var ${varName} = "${varValue}";
    alert(${varName});
</body>
</script>

JavaScriptファイルを用意します。スクリプト名は、Tapestryの標準のコンポーネントの命名規則に従い、コンポーネント名+ .script名としましたが、特にスクリプト名に制限はありません。
DOCTYPEは、Tapestry3, Tapestry4 両方共、Script_3_0.dtdを指定します。
-WEB-INF/jwc/TagList.jwc

<component-specification class="jp.co.taosoftware.tagraw.tape.jwcs.TagList" allow-body="no" allow-informal-parameters="no">
<inject property="script" type="script" object="TagList.script"/>
</component-specification>

-TagList.java

/**
* Inject
* @return
*/
public abstract IScript getScript();
protected void renderComponent(IMarkupWriter aWriter, IRequestCycle aCycle) {
if(aCycle.isRewinding())
return;
PageRenderSupport pageRenderSupport = TapestryUtils.getPageRenderSupport(aCycle, this);
Map symbols = new HashMap();
symbols.put("varName","name");
symbols.put("varValue","12345");
getScript().execute(aCycle,pageRenderSupport,symbols);
.....
}

出力結果(HTML)

<html>
<body>
<script type="text/javascript"><!--
var name = "12345";
alert(name);
// --></script>
....
</body>
</html>

出力結果(画面表示)
javascript1.png
2006/3/07加筆

上記の例では、Scriptテンプレートファイルの指定は、pageファイルで、<inject property=”script” type=”script” object=”TagList.script”/>のように、行いましたが、アノテーションを使用してjavaファイル内での使用も以下のように記述することで可能です。

@InjectScript("TagList.script")
public abstract IScript getScript();

TagList.scriptの場所は、pageファイルでの指定では、pageファイルからの相対になりますが、上記の場合、Javaファイルからの相対となりますので、Javaファイルと同じディレクトリに配置する必要があります。
簡単なサンプルですが、何ができるのか?JavaScriptファイルをどのように生成するのかの参考にしてください。
詳しい解説等は次回にしたいと思います。