我使用PlayFramework和Scala创建了一个简单的登录提交表单,而无需连接任何数据库。
我的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)),
我的问题是什么灵魂??
需要注意的几点:
- 将案例类放在应用程序控制器之外
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>
}