【发布时间】:2018-11-11 02:36:18
【问题描述】:
我在 Scala & Play 上有点挣扎。我的模型中有这本书课
class Book(identifier: Int, title1: String, price1: Int, author1: String) {
val id: Int = identifier
val title: String = title1
var price: Int = price1
val author: String = author1
override def toString: String = s" $title written by $author"
}
在我的 BooksController 类中,我定义了基本 CRUD 操作。我想使用我正在注入的 FormFactory 类来做一些魔术。
import javax.inject._
import play.api.mvc._
import model.Book
import model.BookSet
import play.data._
import scala.collection.mutable.HashMap
@Singleton
class BooksController @Inject()(cc: ControllerComponents, formFactory: FormFactory) (implicit assetsFinder: AssetsFinder)
extends AbstractController(cc) {
//show a form
def create = {
val bookform: Form[Book] = formFactory.form(classOf[Book])
Ok(views.html.bookstore.create(bookform))
}
//show all books
def index = Action {
val map: HashMap[Int, Book] = BookSet.bookMap
Ok(views.html.bookstore.bookindex(map))
}
这是我的 bookstore.create scala.html 文件
@import model.Book
@import helper._
@(bookForm: Form[Book])
<html>
<head>
<title>Create Book </title>
</head>
<body>
<h1> Create Book</h1>
@helper.form( action = routes.BooksController.save() ){
@helper.inputText(bookForm("id"))
@helper.inputText(bookForm("title"))
@helper.inputText(bookForm("price"))
@helper.inputText(bookForm("author"))
<input type="submit" value="Create Book">
}
</body>
</html>
这些是麻烦的代码行:
val bookform: Form[Book] = formFactory.form(classOf[Book])
Ok(views.html.bookstore.create(bookform))
在第二行 IntelliJ 告诉我 类型不匹配,预期 play.api.data.Form[model.Book],实际 play.data.Form[model.Book]
我尝试通过将以下行添加到 html 来解决此问题,但它会导致错误(可能由帮助程序类引起)
@import play.data.Form
我也尝试过使用 asInstanceOf[] 从工厂传递 play.api.data.Form:
val bookform: Form[Book] = formFactory.form(classOf[Book])
Ok(views.html.bookstore.create(bookform.asInstanceOf[play.api.data.Form[Book]]))
尝试此操作后,我在编译过程中遇到错误: 未找到隐式 MessagesProvider 实例。磷 租见https://www.playframework.com/documentation/2.6.x/ScalaForms#Passing-MessagesProvider-to-Form-Helpers [错误] @helper.inputText(bookForm("title"))
它基本上对每个字段都重复。因此,我遵循了 scala docs Option 2 并向控制器添加了注入和隐式请求以及对 html 文件的隐式请求。还是出现同样的错误
此时我感到无助,所以这就是我问这个问题的原因。 是否可以将 play.data.FormFactory 与辅助类一起使用?不幸的是 play.api.data 包没有提供它自己的 FormFactory。我觉得我只是缺少一个明显的解决方案。 感谢耐心
【问题讨论】:
标签: scala playframework