Scala + Play框架:基本表单

时间:2016-05-12 21:59:38

标签: scala playframework

我正在尝试使用用户名/密码创建基本表单并将结果保存在数据库中,只是为了熟悉它。

第一步,我有点卡住:我无法让应用程序在浏览器中呈现表单。一旦我能做到这一点,我想我将继续设置我的数据库。但每次我尝试运行我的应用程序时,都会收到此错误:

  

无法将play.api.Form [models.User]的实例写入http响应。尝试定义Writable [play.api.Form [models.User]]

我整天都在寻找解决这个问题的方法。这是我的文件:

Application.scala(控制器类):

package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import models._


class Application extends Controller {

  val userForm = Form(
    mapping(
      "username" -> nonEmptyText,
      "password" -> nonEmptyText
    )(User.apply)(User.unapply)
  )

  def index = Action {
    Ok(userForm)
  }
}

users.scala.html(查看):

@(user: Form[models.User])(implicit message: Messages)

@import helper._

@main(Messages("Feedback")) {
    <h2>@Messages("Leave Feedback")</h2>
    <form>
        @inputText("username")
        @inputText("password")
        <input type="submit" value="@Messages("send")">
    </form>
}

路由文件:

# Home page
GET     /                           controllers.Application.index

# Map static resources from the /public folder to the /assets URL path
GET     /assets/*file               controllers.Assets.versioned(path="/public", file: Asset)

1 个答案:

答案 0 :(得分:0)

  

无法将play.api.Form [models.User]的实例写入http响应。尝试定义Writable [play.api.Form [models.User]]

已编译的错误提示所发送的数据应该是一个Form,它就像你的问题只是userForm,而Form应该填充models.User

至于你的问题,你只需要做以下事情

首先,定义要在控制器中发送的表单Models.User数据。

val userData = Models.User("name", "password")//Models.User is a case class

如果要将表单数据发送到视图,则必须首先定义类型为 Models.User 的变量数据。在您的代码中,您已创建表单数据 userForm 映射到 models.user 。接下来你要做的是创建一个 models.user 的值 userData ,可以使用 userForm 中> userForm.fill(用户数据) 即可。然后可以将填充了 Models.User 数据的userForm发送到视图中。

然后,使用以下方式将其发送到视图

Ok(views.html.users(userForm.fill(userData)))

所以,你问题的所有答案都是这样的

package controllers

import play.api._
import play.api.mvc._
import play.api.data._
import play.api.data.Forms._
import models._


class Application extends Controller {

val userForm = Form(
 mapping(
   "username" -> nonEmptyText,
   "password" -> nonEmptyText
 )(User.apply)(User.unapply)
)

def index = Action {
    val userData = Models.User("yourName", "yourPassword")// the Models.User value is a case class
    Ok(views.html.users(userForm.fill(userData)))
 }
}

祝你好运