gpt4 book ai didi

Scala Play 表单验证 : required boolean isn't mandatory

转载 作者:行者123 更新时间:2023-12-04 20:46:17 26 4
gpt4 key购买 nike

我在 Play 中发现了有趣的东西!框架表单验证。例如我有这样的形式:

case class Foo(mystring: String, myint: Int, mybool: Boolean) { // doing cool stuff here }
val myForm = Form(
mapping(
"mystring" -> text,
"myint" -> number,
"mybool" -> boolean
)(Foo.apply)(Foo.unapply))

当我绑定(bind) Json 中不存在“mybool”的数据时,验证通过并创建一个带有“mybool = false”的对象。这是很奇怪的行为,好像我会传递相同的数据,但没有“mystring”字段我会得到 Validation Errors: Map(mystring -> error.required)我希望看到 - 因为该字段丢失。

如果我将 bool 字段设为可选,但我手动添加了这样的检查:
"mybool" -> optional(boolean).verifying("mybool.required", _.isDefined)

并在没有字段的情况下绑定(bind)数据,我得到了预期的错误:
Validation Errors: Map(mybool -> mybool.required)

示例数据集:
{
"mystring": "stringHere",
"myint": 33
}

为什么必需的检查不适用于 bool 值?最好的解决方法是什么?是剧吗!错误还是我只是不明白什么?

感谢您的回答。

最佳答案

我想这是设计使然。通常,如果您有一个 bool 字段,那么您会将其绑定(bind)到一个 HTML 复选框。如果在提交表单时选中该框,则一切正常;但是,如果未选中该框,则浏览器不会将字段名称与提交的数据一起发送。基本上,未选中的框和根本不存在的元素之间没有区别,因此 Play 必须假设(对于 bool 字段)该值为“false”。

关于Scala Play 表单验证 : required boolean isn't mandatory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17528265/

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