次のような状況があります: 何らかのコンテキスト ("/page/ctx1" など) でアクティブ化されたページがあります。 t:loop を介してページに挿入されたコンポーネント DayJournalItem があります。
<div t:type="Loop" t:source="journalDays" t:value="journalDay"
t:encoder="dayEncoder"><t:DayJournalItem day="journalDay"
cacheContainer="cacheContainer" /></div>
そして、DayJournalItemには、フォームを持つ他のコンポーネントActivityJournalItemとの別のループがあります
<div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<t:zone t:id="dayAjaxZone" update="show">
<div class="dayHeader">${dayHeader}</div> <div class="dayBody">
<div t:type="Loop" t:source="activities" t:value="activity"><t:ActivityJournalItem
activity="activity" cacheContainer="cacheContainer" /></div>
</div>
</t:zone></div>
ActivityJournalItem コンポーネント
<div xmlns:t="http://tapestry.apache.org/schema/tapestry_5_1_0.xsd">
<t:zone t:id="activityAjaxZone" update="show">
<t:if test="${editingActivity}">
<div class="activityEditFormBody">
<form t:type="form" t:id="activityForm" t:zone="activityAjaxZone">
....
<input t:id="Save" t:type="Submit" value="Save" />
<input t:id="Cancel" t:type="Submit" value="Cancel" />
</form>
</div>
</t:if>
<t:if test="${!editingActivity}">
<div>viewing activity: ${activity.id}</div>
</t:if>
</t:zone></div>
問題は、送信ボタンを押すと NullPointerException が表示されることです。カスタム コンポーネントのすべてのフィールドが null です。Tapestry がコンテキストを正しく復元できないようです。ここでスクリーンショットを見ることができます: http://my.jetscreenshot.com/2672/20100807-tbfe-235kb.jpg
フォーム、ループ、またはどこかでいくつかのパラメーターが欠落していると思います。そして、何が間違っているのか理解できません。ところで、私はエンコーダーを使用しようとしましたが、Tapestry はそれらをイベント呼び出ししません。フォーム内でのみ機能するようです。しかし、ループ内にフォームがあります。したがって、どんな助けも大歓迎です。
ps 詳細が必要な場合は、完全なソース コード (Google コード) を参照してください: http://code.google.com/p/tasks-journal/source/checkout
UPD : t:context をフォームに渡すことができ、onPrepareForSubmit フェーズでフィールドを手動で復元できることがわかりました (かなり汚れた回避策を介して)。さて、今は NPE はありませんが: 1. これは醜いです。2. これは、フォームの再レンダリングにはつながりません。例外はなく、期待どおりに再レンダリングされません。HTTP 応答を調べたところ、空の括弧 = "{}" しかありません
UPD2 : 私はまだ悪い回避策で遊んでいます。私が onSuccess の場合、「これを返す」ことがわかりました。その後、再レンダリングが行われます。しかし (!) 常にページの最初のフォーム (またはゾーン?) を再レンダリングします。http://my.jetscreenshot.com/2672/20100808-thdx-190kb.jpg