2016-05-12 69 views
0

我想用用户名/密码创建一个基本表单并将结果保存到数据库中,以便熟悉它。Scala + Play框架:基本形式

第一步,我有点卡住:我无法让应用程序在我的浏览器中呈现窗体。一旦我可以做到这一点,我想我会继续让我的数据库设置。但每次我尝试运行我的应用程序时,我得到这个错误:

Cannot write an instance of play.api.Form[models.User] to http response. Try to define a 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

Cannot write an instance of play.api.Form[models.User] to http response. Try to define a Writable[play.api.Form[models.User]]

的遵守错误有g伊芬的提示发送应该是一种形式,就是用户窗体至于你的问题,并表应该充满models.User

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

首先,定义一个表单Models.User数据,您想在控制器中发送。

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

如果你想表单数据发送到的意见,你必须用Models.User类型首先定义一个变量的数据。在您的代码中,您已创建映射到models.user的表单数据userForm。你应该做的下一件事是创建一个价值用户数据models.user,它可以被填充到使用userForm.fill(用户数据)用户窗体。然后userForm填充完整的Models.User数据可以发送到视图。

然后,使用以下方式

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))) 
} 
} 

有一个好运气