2016-05-12 4 views
0

私はusername/passwordで基本フォームを作成し、その結果をデータベースに保存しようとしています。Scala + Play Framework:基本フォーム

ステップ1:私はちょっと立ち往生しています。ブラウザでフォームをレンダリングするアプリケーションを取得できません。私がそれをやれば、私は自分のデータベースをセットアップすることに移ります。私はこの問題の解決策を探して私の全体の一日を過ごした

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]]

遵守エラー〜を持つiven models.User

ご質問については

で満たされる必要があるだけで、あなたの質問のためとしてユーザーフォーム、およびフォームであるフォームでなければなりません送信されたデータは、あなただけの、次のことを行う必要があるというヒント

まず、コントローラに送信するフォームのModels.Userデータを定義します。

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

あなたがビューにフォームデータを送信したい場合は、まずModels.Userの型の変数データを定義する必要があります。あなたのコードでは、という形のデータをmodels.userにマッピングしました。あなたがすべき次の事はuserForm.fill(のuserData)を使用してユーザーフォームに充填することができるmodels.userの種類、とのuserData値を作成することです。その後、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))) 
} 
} 

が幸運を持っているようにします

関連する問題