2016-05-12 2 views
0

Я пытаюсь создать базовую форму с именем пользователя/паролем и сохранить результаты в базе данных, чтобы ознакомиться с ней.Scala + Play Framework: Основная форма

Шаг первый, и я немного застрял: я не могу заставить приложение отображать форму в своем браузере. Как только я смогу это сделать, я полагаю, что я перейду к настройке моей базы данных. Но каждый раз, когда я пытаюсь запустить мое приложение, я получаю эту ошибку:

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 IVEN намек, что данные, передаваемые должны быть форма, которая является просто UserForm как для вашего вопроса, и форма должна быть заполнена models.User

Что касается вашего вопроса, то вам просто необходимо сделать следующие вещи

Во-первых, определите форму данных Model.User, которые вы хотите отправить в контроллер.

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

если вы хотите отправить данные формы мнения, вы должны определить переменную данные с типом Models.User во-первых. В вашем коде вы создали данные формы userForm отображение на models.user. Следующее, что вы должны сделать, это создать значение USERDATA с типом models.user, который может быть заполнен в UserForm с использованием userForm.fill (USERDATA). Затем пользовательская форма заполнена 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))) 
} 
} 

Have удачи