我对播放框架flash stuff....high级别的意义感到困惑,“把东西放在flash中的http POST上,以便在重定向后能够检索http GET”。我猜你“可以”把东西放在GET请求中,以便在下一个GET请求时被检索到,但这个请求非常非常糟糕,因为flash是在标签之间共享的;)。
我有以下内容,它需要params.flash和Validation.keep,否则我的页面将停止工作...(到目前为止还好)....
if(Validation.hasErrors()) {
params.flash(); // add http parameters to the flash scope
Validation.keep(); // keep the errors for the next request(after redirect)
registerCompanyPage();
}当然,稍后,我会在这种情况下将这个和那些添加到中断功能中。
if(Validation.hasErrors() || !license) {
Validation.keep(); //BREAKS functionality!!!! as errors NEVER go away now after getting them just once
params.flash(); //BREAKS functionality as stuff NEVER goes away now
log.info("errors="+Validation.errors());
flash.error("Errors in form");
log.info("company url="+company.getCompanyUrl());
render("@registerStep2Page", user, company, license);
}那么registerCompanyPage是否在执行重定向,即使其中的代码调用了render?(我没有在这里发布代码),当我在我的第二个方法中将render更改为redirect()时,那么我就会得到控制器根本找不到,它完全停止工作。
我查看了playframework中示例中的所有验证,它们都在没有Validation.keep或params.flash的情况下执行渲染,那么这里发生了什么?有一次,我想我删除了Validation.keep和其他一些损坏,但现在似乎不能再现它。
有没有人完全明白这是怎么回事?
谢谢你,迪恩
发布于 2012-02-13 07:06:23
任何对公共静态方法的调用都会调用重定向。(检查浏览器中的url以确认您是否喜欢...即它与您作为帖子的一部分调用的操作不同)。
因此,在您的第一个示例中,您需要使用flash,以便在重定向回原始页面后不会丢失错误。
你的第二个例子是直接在动作中渲染。所以,使用闪存,你正在为下一个请求存储东西,这显然是不好的,因为你可能没有任何错误。
你在网上看到的例子会有所不同,原因有几个。最初的视图是使用flash,并强制重定向回原始页面。这使得url和你所看到的当前页面保持同步。但是,由于闪存是cookie,因此在只能包含4Kb的介质中存储参数和错误消息是有限制的。因此,人们通常使用你的第二种方法。它不像RESTfully一样干净,但它确实防止了对cookies的需要,因为没有重定向。
https://stackoverflow.com/questions/9253454
复制相似问题