2014-11-23 29 views
1

我創建了一個簡單的登錄提交表單使用playframework和scala,而無需連接任何數據庫。類型不匹配;找到:play.api.data.Form [controllers.Application.Userdata] required:play.api.data.Form [(String,String)]

application.scala這是我的控制器我寫的代碼

import play.api._ 
import play.api.mvc._ 
import play.api.data._ 
import play.api.data.Forms._ 
import play.api.mvc.Request 
import views.html._ 

case class Userdata(email:String,password:String) 

object Application extends Controller { 

    case class Userdata(email:String,password:String) 

    val userForm = Form(
    mapping(
    "email" -> text, 
    "password" -> text 
)(Userdata.apply)(Userdata.unapply) 
) 

    def usercheck = Action{ implicit request=> 

    userForm.bindFromRequest.fold(
     formWithErrors => BadRequest(views.html.login(formWithErrors)), 
     Userdata => { Ok(views.html.index("congrates"))} 

    )} 
    def index() = Action { 
    implicit request=> 
    Ok(views.html.login(userForm)) 
    } 

和我的視圖模板是login.scala.html ..

@(form: Form[(String,String)]) 

@import helper._ 


    @form(routes.Application.usercheck){ 
    <form class=frmuuser> 
     <input type=text placeholder=email id='emailid'> 
     <input type=password placeholder=password id='pwd'> 
     <input type=submit value=login id='enter'> 

    </form> 
    } 

,但它不工作,並給了我錯誤

type mismatch; found : play.api.data.Form[controllers.Application.Userdata] required: play.api.data.Form[(String, String)] 

在這個控制器線

formWithErrors => BadRequest(views.html.login(formWithErrors)), 

什麼是靈魂我的問題??

回答

-1

幾點要注意:

  • 把你的測試用例類Userdata應用控制器之外。這是將其移入控制器包內。
  • 您也可以在模板的開頭添加@import,以導入任意包或類。

試試這個。

Application.scala:只有一個Userdata情況下,類定義(您有兩個定義這些類的)

import play.api._ 
import play.api.mvc._ 
import play.api.data._ 
import play.api.data.Forms._ 
import play.api.mvc.Request 
import views.html._ 

case class Userdata(email:String, password:String) 

object Application extends Controller { 

    val userForm = Form(
    mapping(
    "email" -> text, 
    "password" -> text 
)(Userdata.apply)(Userdata.unapply) 
) 

    def usercheck = Action{ implicit request=> 

    userForm.bindFromRequest.fold(
     formWithErrors => BadRequest(views.html.login(formWithErrors)), 
     Userdata => { Ok(views.html.index("congrates"))} 

    )} 
    def index() = Action { 
    implicit request=> 
    Ok(views.html.login(userForm)) 
    } 

login.scala.html:使用Userdata代替(String, String)

@(form: Form[Userdata]) 
@import helper._ 

    @form(routes.Application.usercheck){ 
    <form class=frmuuser> 
     <input type=text placeholder=email id='emailid'> 
     <input type=password placeholder=password id='pwd'> 
     <input type=submit value=login id='enter'> 

    </form> 
    } 
+0

你能或不能添加@import在模板的開頭? – 2014-11-23 17:21:26

+1

我把case類放在控制器外面,並使用@(form:Form [Userdata]),但它給了我同樣的錯誤。 – 2014-11-24 06:21:31

+0

你能分享一個複製你的問題的示例項目嗎?你還在使用什麼版本的Play Framework? – tuxdna 2014-11-24 21:09:04

相關問題