【发布时间】:2015-05-20 16:31:04
【问题描述】:
在 Play Framework 2 (Java) 中处理表单中的错误时,我想呈现一个整体错误消息,警告用户出现问题,例如“Form X 未更新”。这样做的一种方法是,除了每个表单字段的错误之外,创建一个全局错误,然后在每个模板上呈现它:
控制器:
if(form.hasErrors()) {
form.reject("Form X not updated."); // This creates a global error
}
模板:
@if(form.hasGlobalErrors) {
@someFunctionToPresentErrors(from.globalError.message))
}
但是,将这段相同的代码添加到包含表单的每个模板违反了DRY 原则。
到目前为止,我最好的解决方案是将错误消息添加到Http.Context,然后在每个模板调用的主模板中拦截错误消息:
控制器:
Http.Context.current().args.put("error", "Form X not updated.");
主模板:
@if(Http.Context.current().args.containsKey("error")){
@someFunctionToPresentErrors(
Http.Context.current().args.get("error").asInstanceOf[String])
}
这更好,因为它允许我将错误演示文稿保存在一个地方,但感觉就像滥用Http.Context。请注意,flash(...) 也可用于隐式传递变量,并提供与Http.Context 相同的效果,但在调用badRequest(...) 时不允许这样做,因为flash 只能用于重定向。无论如何,我认为应该有更好的方法来使用 Play Framework 提供的表单机制。
对此有最佳实践吗?
【问题讨论】:
标签: java playframework playframework-2.3