0

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 に直接移動することはできません。その要件を取り除くことはできません。

4

2 に答える 2

0

ページ間をリダイレクトする適切なタペストリーの方法は、イベント ハンドラーからページ クラス、ページ名、またはリンクを返すことです。

public Object onActionFromMyLink() {
  return MyPage.class;
}

タペストリーのクライアント側エラーを非表示にするには、javascript 関数をオーバーライドできますTapestry.error

Tapestry.error = function() {
  console.log(...);
}

しかし、問題はあなたのコードにあると思います。

更新日:

タペストリーでナビゲーションを行う最良の方法は、ページ アクティベーション コンテキストを使用することです

于 2013-08-12T18:34:33.613 に答える
0

PageA が PageB にリダイレクトされ、次に PageB が PageC にリダイレクトされる場合、PageB がレンダリングされた (または JavaScript 例外が発生した) 可能性はないと思います。PageB は単純に302 リダイレクト応答を返し、ブラウザーは直接 PageC に移動します。

PageC に onPassivate() メソッド (または同等の @PageActivationContext アノテーション) がなく、アクティベーション コンテキストがリクエスト間で失われていると推測しています。

http://jumpstart.doublenegative.com.au/jumpstart/examples/navigation/onactivateandonpassivate/3 http://tapestry.apache.org/current/apidocs/org/apache/tapestry5/annotations/PageActivationContext.html

于 2013-08-14T08:43:22.947 に答える