当用户创建新的Load
对象时,如果用户选中“已付款已付款”复选框,则会在新{{1}之后立即将其重定向到Payment
控制器} 已经被创造了。创建新Load
所需的一些参数也用于创建新的Load
,因此我只需在重定向中传递参数,如下所示:
Payment
这很好用,但它给了我一个真实讨厌的URL,其中包含所有参数。 如何将我的参数传递给其他控制器并防止它们出现在网址中?
更新
我应该说,我感谢大家对这个小问题的建议。即使提出了所有建议,在redirect(controller: "payment", action: "create", params: params)
调用中手动构建参数映射仍然是我想要避免的最佳方式。这不是什么大不了的事,特别是因为只有少数几个参数,我只是不相信没有一种更清洁,更自动化的方法来解决这个问题。
redirect
答案 0 :(得分:4)
您可以执行服务器端转发而不是重定向。只需更换:
redirect(controller: "payment", action: "create", params: params)
使用:
forward(controller: "payment", action: "create", params: params)
要解决您在评论中描述的刷新问题,请将您转发的操作发送重定向(而不是渲染视图),例如
class PaymentController {
def create = {
Integer paymentId = // Create a payment and get it's ID
redirect(action: 'show', id: paymentId)
}
def show = {
def id = params.id
// show the payment with this ID
}
}
答案 1 :(得分:3)
或
答案 2 :(得分:1)
可以使用flash对象来实现这一点(尽管我会按原样保留实现)。
将所有参数复制到flash。
params.each {
flash[it.key]=it.value
}
在“创建”操作中使用flash地图而不是params地图。
答案 3 :(得分:0)
我没试过,但我认为它会解决你的问题。
redirect(controller: "payment", action = [POST:"create"], params: params)
答案 4 :(得分:0)
这是另一个建议: - )
保持从加载到付款的重定向不变。如果您收到使用params的呼叫,请检查付款操作,然后将其保存在会话或闪存中,并重定向到没有参数的相同操作。使用putAll从会话/ flash恢复参数并继续操作。
有点像后重定向 - 获取付款,但实际上是GetWithParams-Redirect-Get。结果是干净的URL,没有刷新问题。
我在应用中使用它来获取干净的网址,并将状态保存在应用的不同部分(但由于您不需要后者,因此应删除它或将其保存在闪存中)。