我正在尝试使用用户名/密码创建基本表单并将结果保存在数据库中,只是为了熟悉它。
第一步,我有点卡住:我无法让应用程序在浏览器中呈现表单。一旦我能做到这一点,我想我将继续设置我的数据库。但每次我尝试运行我的应用程序时,都会收到此错误:
无法将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)
答案 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)))
}
}
祝你好运