Управление потоком страниц в Play! рамки тегов
В веб-приложении, созданном с использованием Play Framework, у меня есть страница оформления заказа, где перечислены корзина покупок пользователя, а также форма адреса. Я создал адресную форму в виде тега (addressform.html), чтобы его можно было повторно использовать.
checkout.html:
#{if shopcart.cartItems}
#{shopcartview customer:customer,shopcart:shopcart/}
#{addressform customer:customer /}
#{/if}
Адресная форма имеет элемент формы #{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()
после успешного завершения откроется страница платежей. Это нехорошо - пользователь может вообще не захотеть менять информацию об оплате. Также я предоставляю ссылку на страницу платежей для тех пользователей, которые хотят изменить информацию об оплате. Я хочу, чтобы отображалась та же страница OrderConfirm, чтобы пользователь мог нажать на Submit Order
кнопка.
Так как мне это сделать? Я могу, конечно, повторно использовать форму адреса в этом случае, верно? Можете ли вы помочь мне понять, как управлять потоком страниц в этом случае?
1 ответ
Вы можете предоставить параметр, указывающий, куда перенаправить пользователя, в setAddressInfo() через скрытый ввод или через параметр java, такой как. Оба варианта:
<input type="hidden" name="urlToRedirectUserTo" value="urlToRedirecTo(maybe using @{}..)"/>
Или же:
#{form @setAddressInfo("urlToRedirectUserTo")}
И в действии вы делаете:
public static void setAddressInfo(String urlToRedirectUserTo) {
...
...
...
redirect(urlToRedirectUserTo);
}
Есть лучшие варианты сделать его более типизированным и менее подверженным ошибкам, но этот, вероятно, достаточно хорош.