【问题标题】:Scala Play: object index is not a member of package views.htmlScala Play:对象索引不是包views.html的成员
【发布时间】: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 req inside action def index = Action { implicit req =&gt; Ok(views.html.index(Book.form)) }
  • @curious 我必须添加它以避免以下错误“index.scala.html:39:找不到参数消息的隐含值:play.api.i18n.Messages [错误] @helper.inputText(form("author"))"

标签: scala playframework


【解决方案1】:

从文件夹 /project/target 中删除所有内容并在终端上构建: sbt 编译

【讨论】:

    【解决方案2】:

    显然,即使在这种情况下,问题也与 IDE 有关。尽管看似无关,但考虑到它是从命令行发生的,即使在应用了所有更改之后也是如此 suggested by others

    我创建了一个新项目 -> 在 IntelliJ IDEA 2016.2.2 中播放 2.x。然后我从旧的错误项目中复制/粘贴所有内容,在新的项目结构中。尽管我必须添加

    ,但一切都立即生效
    import play.api.Play.current
    import play.api.i18n.Messages.Implicits._
    

    到 Application.scala 以传递隐式消息(如在 cmets 中发现的 @curious)。我没有将他的评论标记为答案,因为当我尝试在错误项目中添加这些导入时,我仍然遇到同样的错误。所以不,修复将与我仍然不太确定的 IDE 设置有关。当然,我的解决方法对我来说已经足够好了。

    【讨论】:

      猜你喜欢
      • 2015-04-12
      • 2015-10-04
      • 1970-01-01
      • 2017-11-09
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      相关资源
      最近更新 更多