1

Play フレームワークを使用して構築された Web アプリには、ユーザーのショッピング カートとアドレス フォームを一覧表示するチェックアウト ページがあります。再利用できるように、アドレスフォームをタグ (addressform.html) として作成しました。

checkout.html:

#{if shopcart.cartItems}
    #{shopcartview customer:customer,shopcart:shopcart/}
    #{addressform customer:customer /}
#{/if}

住所フォームには form 要素があります#{form @setAddressInfo()}

以下のようにコントローラーメソッドを呼び出します

public static void setAddressInfo(Long customerId,...) {
   ...
   showPaymentPage();
}

すべてがうまくいけば、支払いページに移動します。

addressformこの問題は、自分のページでを再利用したいときに発生しconfirmOrderます。

confirmOrder.html:

#{if shopcart.cartItems}
        #{shopcartview customer:customer,shopcart:shopcart/}
        #{addressform customer:customer /}
#{/if}

<a href="link_to_payment_page">editPaymentInfo</a>

ここで、ユーザーが住所を変更してフォームを送信すると、setAddressInfo()メソッドは正常に完了すると支払いページを開きます。これは良くありません。ユーザーは支払い情報をまったく変更したくないかもしれません。また、支払い情報を変更したいユーザーのために、支払いページへのリンクを提供しています。ユーザーがSubmit Orderボタンをクリックできるように、同じ OrderConfirm ページが表示されるようにします。

では、どうすればいいですか?この場合、確かに住所フォームを再利用できますよね? この場合、ページ フローを管理する方法を理解するのを手伝ってもらえますか?

4

1 に答える 1

1

ユーザーをリダイレクトする場所を示すパラメーターを、隠し入力または Java パラメーターなどを介して setAddressInfo() に提供できます。両方のオプション:

<input type="hidden" name="urlToRedirectUserTo" value="urlToRedirecTo(maybe using @{}..)"/>

または:

#{form @setAddressInfo("urlToRedirectUserTo")}

そして、あなたが行うアクションでは:

public static void setAddressInfo(String urlToRedirectUserTo) { 
   ...
   ...
   ...
   redirect(urlToRedirectUserTo);
}

より型付けされ、エラーが発生しにくくするためのより良いオプションがありますが、おそらくこれで十分です。

于 2011-09-21T12:48:14.650 に答える