加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala Play表单验证:必需的布尔值不是必需的

发布时间:2020-12-16 18:35:31 所属栏目:安全 来源:网络整理
导读:我在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.a
我在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))

当我在我的Json中绑定没有“mybool”的数据时,验证会传递并创建一个“mybool = false”的对象.这是非常奇怪的行为,好像我将传递相同的数据,但没有“mystring”字段,我将得到验证错误:Map(mystring – > error.required),我希望看到 – 因为字段丢失.

如果我使布尔字段可选,但我手动添加这样的检查:

"mybool" -> optional(boolean).verifying("mybool.required",_.isDefined)

并且没有字段绑定数据我得到了预期的错误:

Validation Errors: Map(mybool -> mybool.required)

示例数据集:

{
  "mystring": "stringHere","myint": 33
}

为什么需要检查不适用于布尔值?它的最佳解决方法是什么?这是一场比赛!我或者只是不明白的东西?

谢谢你的回答.

解决方法

我想象它是设计的.通常,如果您有一个布尔字段,那么您可以将其绑定到HTML复选框.如果在提交表单时选中该框,则所有内容均按预期工作;但是,如果未选中此框,则浏览器不会使用提交的数据发送字段名称.基本上,未经检查的框与根本不存在的元素之间没有区别,因此Play必须假设(对于布尔字段)该值为“false”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读