イベントリスナ中でforEachとforEachStatusを使うことは、コンポーネント作成段階[35]でのみ使用可能なので注意を払わなければなりません。こうして、以下の例は正しくありません。onClickリスナが呼び出されると、each変数が使えなくなります。
<window title="Countries" border="normal" width="100%">
<zscript><![CDATA[
String[] countries = {
"China", "France", "Germany", "United Kindom", "United States"};
]]></zscript>
<hbox>
<button label="${each}" forEach="${countries}"
onClick="alert(each)"/> <!-- incorrect!! -->
</hbox>
</window>
同じ段階(コンポーネント作成段階)で行われるので、ボタンのラベルは正確に指定されています。
また、イベントリスナ中でEL表記を使うことはできません。例えば、OnclickリスナはJavaコードではないので以下のコードは実行失敗してしまいます。(つまり、EL表記はzscript中で無視されます。)
<button label="${each}" forEach="${countries}"
onClick="alert(${each})"/> <!-- incorrect!! -->
each(とforEachStatus)のコンテンツをどこかに保存すれば問題は解決します。保存したコンテンツはリスナ実行中でも使用可能です。また、コンテンツはどこでも保存可能ですが、以下のようにするとわかりやすいです。
<window title="Countries" border="normal" width="100%">
<zscript><![CDATA[
String[] countries = {
"China", "France", "Germany", "United Kindom", "United States"};
]]></zscript>
<hbox>
<button label="${each}" forEach="${countries}"
onClick="alert(self.getAttribute("country"))">
<custom-attributes country="${each}"/>
</button>
</hbox>
</window>
ボタンラベルのように、custom属性のプロパティはコンポーネント作成段階で処理され、そこでeachを使うことができます。eachはcustom属性に保存され、コンポーネントが存在する限り(又は、プログラム上で削除されなければ)なくなりません。