Управление потоком страниц в 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);
}

Есть лучшие варианты сделать его более типизированным и менее подверженным ошибкам, но этот, вероятно, достаточно хорош.

Другие вопросы по тегам