在Play中管理页面流!框架标签

时间:2011-09-21 11:13:48

标签: java playframework page-flow

在使用Play框架构建的网络应用程序中,我有一个结帐页面,其中列出了用户的购物车以及地址表单。我创建了地址表单作为标记(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 个答案:

答案 0 :(得分:1)

您可以通过隐藏输入或java paramater等提供一个参数,指示将用户重定向到哪里,到setAddressInfo()。两个选项:

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

或者:

#{form @setAddressInfo("urlToRedirectUserTo")}

在你的行动中:

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

有更好的选择可以使其更加类型化,更不容易出错,但这个可能已经足够好了。