Tapestry では、ユーザーをページ A からページ B にリダイレクトする状況があり、ページ B が表示される前にページ C にリダイレクトされることがあります。これにより、ページに表示される次のような赤いポップアップとして表示される次の JavaScript 例外が発生します。
Exception invoking function Tapestry.Initializer.activate with parameters ["example"]: TypeError: $(...) is null
null としてリストされているすべての要素はページ B のものであり、表示したくない、または表示するつもりはありません。このシナリオでは、ユーザーをページ A からページ C に直接リダイレクトすることはできません。
これらの javascript 例外を自分で処理する方法、または表示されないようにする方法、またはこれらのエラーを発生させずにページ間をリダイレクトする適切なタペストリー手法が必要です。現在、@AfterRender 関数からリダイレクト コードを起動することで、ユーザーがページを移動することをシミュレートしています。
編集:以下のコードの関連部分を追加しました
ユーザーが変更をクリックした後のページ1で、ユーザーページにリダイレクトします
@InjectPage
UserDataPage userDataPage;
@OnEvent(value = EventConstants.ACTION, component = "modify")
Object onModify(Long userToEdit) {
userDataPage.setUserId(userToEdit);
userDataPage.setEditDetails(true);
return userDataPage;
}
詳細を編集する必要があるため、 UserDataPage は次のようにします。
@InjectPage
UserDetailsPage userDetailsPage;
@AfterRender
Object setup() {
if(editDetails) {
userDetailsPage.setUserId(userToEdit);
return userDetailsPage;
}
}
UserDetailsPage が読み込まれると、見つからない UserDataPage のコンポーネントに関するエラーが表示されます (明らかに、私はもう UserDataPage にいないためです)。Firebug では、スクリプトに UserDataPage と UserDetailsPage の両方からのすべての要素が含まれていることがわかります。たとえば、両方のページにグリッド要素があるため、結果のタペストリー スクリプトは両方のグリッドを参照し、自動的に名前が grid_0 に変更されます。次に、UserDataPage からグリッドが欠落しているというエラーが表示されます。
UserDetailsPage は UserDataPage からリダイレクトする必要があるため、ユーザーのリスト (最初のページ) から UserDetailsPage に直接移動することはできません。その要件を取り除くことはできません。