gpt4 book ai didi

java - Play Framework : Best practice for validation errors redirect

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:59:04 27 4
gpt4 key购买 nike

我正在使用 play 1.2.4 实现一个项目,根据文档,处理验证的正确方法是:

public static void signUp() {
render();
}

public static void doSignUp(@Required @Valid User user) {
if (validation.hasErrors()) {
params.flash();
validation.keep();
signUp();
}
user.create();
Application.index();
}

但是根据 play 提供的示例,似乎使用了不同的方法:

public static void signUp() {
render();
}

public static void doSignUp(@Required @Valid User user) {
if (validation.hasErrors()) {
render("@signUp");
}
user.create();
Application.index();
}

对于这个小例子,代码差异很小,但在更复杂的例子中就不是那么简单了。

我看到的优点和缺点是:第一种方法:

  • 为用户提供漂亮的 URL

  • 总是在 POST 后重定向,因此如果用户刷新页面则不会出现确认问题

  • 调用前只有一个方法负责填充renderArgs模板

  • 编译时验证signUp方法在重命名后退出

第二种方法:

  • 更快,在浏览器中没有重定向/往返

那么最佳做法是什么?在应用程序中使用哪种方法?

最佳答案

让我回顾一下你的论点:

首先:

Gives nice URLs to user

URL 在 Play 1.x 中总是没问题的。您可以使用以下内容:

get  /signUp  myController.signUp
post /signUp myController.doSignUp

所以第一个参数并不重要。

第二个:

Always redirects after POST, so no confirm problem if user refreshes page.

我认为如果用户犯了错误并按 F5 或使用其他技术刷新,那么如果他再次遇到相同的错误则很好。如果用户有可能得到一个干净的表单,我更喜欢有一个取消按钮。

第三:

Only one method is responsible for filling renderArgs before calling template

看不到render("@signUp");的问题

第四:

Compile time verification that signUp method exits if it gets renamed.

好吧,这是一个论点,但我认为它很薄弱。在 play 2.0 中将是 false。

所以我认为这两种方法都可以,视情况而定。特别是如果你有一个大表格,重定向将不起作用。默认情况下,我会推荐第二种解决方案。不过不知道play 2.0的情况会怎样。

关于java - Play Framework : Best practice for validation errors redirect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331589/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com