2014-11-23 69 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

相关问题