【发布时间】:2017-03-27 09:23:14
【问题描述】:
我来了
object index is not a member of package views.html
但与在此主题上打开的所有其他线程不同,我的问题似乎与 IDE 完全无关。无论我如何尝试通过运行来清理和重建,我都会从命令行(没有 IDE)得到这个问题
activator clean compile run
或者只是
sbt clean compile
这是我的配置/路由:
GET / controllers.Application.index
GET /books controllers.Application.listBooks
POST /books controllers.Application.upload
GET /assets/*file controllers.Assets.at(path="/public", file)
这是我的观点/index.scala.html:
@import play.api.data.Form
@import models.Book
@(form: Form[Book])(implicit messages: Messages)
<!DOCTYPE html>
<html>
<head>
<title>xxx</title>
<link rel="stylesheet" type="text/css" media="screen" href='@routes.Assets.at("stylesheets/main.css")'>
<script type="text/javascript" href='@routes.Assets.at("javascripts/jquery-1.9.0.min.js")'></script>
</head>
<body>
<div class="screenshot">
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span>
</a> <a class="brand" href="#">Workday Dublin CTF</a>
<div class="nav-collapse">
<ul class="nav">
</ul>
</div>
</div>
</div>
</div>
<h1>All Your Books Are Belong To Us</h1>
<div class="container">
<h2>Add Book</h2>
@helper.form(action = routes.Application.upload, 'enctype -> "multipart/form-data") {
@helper.inputText(form("title"))
@helper.inputText(form("author"))
@helper.inputFile(form("myUpload"))
<div class="form-actions">
<button type="submit" class="btn btn-primary">Create Book</button>
</div>
}
</div>
</div>
</body>
</html>
最后,这是在我的控制器/Application.scala 中引发错误的地方:
package controllers
import models.Book
import models.Book._
import play.api.mvc._
class Application extends Controller {
def index = Action {
Ok(views.html.index(Book.form))
}
def listBooks = Action {
Ok(books.head.myUpload)
}
def upload() = Action(parse.multipartFormData) { request =>
request.body.file("myUpload").map { myUpload =>
import java.io.File
val filename = myUpload.filename
val contentType = myUpload.contentType
myUpload.ref.moveTo(new File(s"/tmp/$filename"))
addBook(Book("xxxtitle", "xxxauthor", filename))
Ok("File uploaded at /tmp/"+filename)
}.getOrElse {
Redirect(routes.Application.index).flashing(
"error" -> "Missing file")
}
}
}
在引用模型/Book.scala 的 Ok(views.html.index(Book.form)) 处引发错误:
package models
import play.api.data.Form
import play.api.data.Forms._
case class Book(title: String, author: String, myUpload: String)
object Book {
var books = List(Book("title test 1", "author test 1", "filename test 1"))
def addBook(book: Book) = books = books ::: List(book)
val form = Form(mapping(
"title" -> text,
"author" -> text,
"myUpload" -> nonEmptyText)(Book.apply)(Book.unapply))
}
由于我对此进行了很多研究,并且到目前为止还没有其他解决方案有效,因此我们将不胜感激。非常感谢!
【问题讨论】:
-
此导入
import views.html.index不是必需的 -
嗨@pamu 谢谢。这是我尝试解决这个问题的结果之一。我现在已经删除了它,但我仍然得到同样的错误。 (也会更新原帖)
-
(implicit messages: Messages)来自哪里?您在任何地方都没有隐式定义,还是与国际化有关? -
尝试使用
implicit reqinside actiondef index = Action { implicit req => Ok(views.html.index(Book.form)) } -
@curious 我必须添加它以避免以下错误“index.scala.html:39:找不到参数消息的隐含值:play.api.i18n.Messages [错误] @helper.inputText(form("author"))"
标签: scala playframework