Forms 播放框架表单提交isn';t通过验证
我是scala和类型安全语言的新手,所以我可能忽略了一些基本的东西。这就是我的问题 目标:我想提交一个表单,它只是一个文本输入,不镜像我的案例类。它将以type:String结束 问题:无法从折叠中获得成功 我在前端有一个表单,我选择用html编写,而不是play的表单助手(如果有问题,我愿意更改) 我试图在Play for Scala一书中遵循/修改教程,但它们将其形式与case类相匹配,Play的教程也与我的用例有点不同。连同你的答案,如果你能包括你是如何想出它的,这将是非常有用的,这样我就可以自己更好地解决问题Forms 播放框架表单提交isn';t通过验证,forms,scala,playframework,Forms,Scala,Playframework,我是scala和类型安全语言的新手,所以我可能忽略了一些基本的东西。这就是我的问题 目标:我想提交一个表单,它只是一个文本输入,不镜像我的案例类。它将以type:String结束 问题:无法从折叠中获得成功 我在前端有一个表单,我选择用html编写,而不是play的表单助手(如果有问题,我愿意更改) 我试图在Play for Scala一书中遵循/修改教程,但它们将其形式与case类相匹配,Play的教程也与我的用例有点不同。连同你的答案,如果你能包括你是如何想出它的,这将是非常有用的,这样我就
- $
另外,如果有必要,我正在使用intellij idea作为我的ide您需要在form.bindFromRequest上调用fold方法。从>处理绑定失败
loginForm.bindFromRequest.fold(
formWithErrors => // binding failure, you retrieve the form containing errors,
value => // binding success, you get the actual value
)
也可以对单个字段使用单个映射构造
Form(
single(
"email" -> email
)
)
我的结局是:
def shorten = Action { implicit request =>
newUrlForm.bindFromRequest.fold(
hasErrors = { form =>
val message = "Somethings gone terribly wrong"
Redirect(routes.Application.dash()).flashing("error" -> message)
},
success = { urlLong =>
val message = "Woot it was successfully added!"
Redirect(routes.Application.dash()).flashing("success" -> message)
}
)
}
我不确定我是否真的理解我做错了什么,但这段基于mericano1答案的代码最终也起到了作用。以前我好像是从表单中取出urlLong val,然后折叠表单,这样就可以直接折叠表单,并在此过程中提取urlLong的val
此外,我也不清楚为什么fold的论点被记录得不同
- 匹配我拥有的内容(搜索折叠):
- 符合梅里卡诺1号的答案:
newUrlForm.bindFromRequest
对newUrlForm
没有任何副作用,它只是返回一个新的表单对象,并从请求中绑定值。因此,如果您打开newUrlForm
而不是newUrlForm.bindFromRequest
值,则会出现错误(您没有在表单中将urlong
文本标记为可选)
Form(
single(
"email" -> email
)
)
def shorten = Action { implicit request =>
newUrlForm.bindFromRequest.fold(
hasErrors = { form =>
val message = "Somethings gone terribly wrong"
Redirect(routes.Application.dash()).flashing("error" -> message)
},
success = { urlLong =>
val message = "Woot it was successfully added!"
Redirect(routes.Application.dash()).flashing("success" -> message)
}
)
}