Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms 播放框架表单提交isn';t通过验证_Forms_Scala_Playframework - Fatal编程技术网

Forms 播放框架表单提交isn';t通过验证

Forms 播放框架表单提交isn';t通过验证,forms,scala,playframework,Forms,Scala,Playframework,我是scala和类型安全语言的新手,所以我可能忽略了一些基本的东西。这就是我的问题 目标:我想提交一个表单,它只是一个文本输入,不镜像我的案例类。它将以type:String结束 问题:无法从折叠中获得成功 我在前端有一个表单,我选择用html编写,而不是play的表单助手(如果有问题,我愿意更改) 我试图在Play for Scala一书中遵循/修改教程,但它们将其形式与case类相匹配,Play的教程也与我的用例有点不同。连同你的答案,如果你能包括你是如何想出它的,这将是非常有用的,这样我就

我是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号的答案:

映射只是转换表单名称的一种方法,还是它们有其他(必要的)用途?是的,映射是从html表单映射到您自己的域对象的一种简单方法。在本例中,它是一个单独的参数,因此没有多大帮助,事实上,您应该能够直接绑定,如中所示。但是对于更复杂的场景,它是非常方便的。我认为您缺少的是
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)
    }
  )
}