渲染无法应用

时间:2014-07-11 15:06:11

标签: java playframework-2.0

我正在阅读这本书Learn Java for Web Development并试图从书中执行代码示例。

我遇到Play Framework代码示例(第8章)的问题。

例外:

  

“views.html.index中的render(java.util.List,play.data.Form)无法应用于(java.lang.String)”

控制器类:

final static Form<Book> bookForm = Form.form(Book.class);  

public static Result books(){       
    return ok(views.html.index.render(Book.all(),bookForm));            
}

查看 - index.scala.html

@(books: List[Book], bookForm: Form[Book])

@import helper._

@main("books") {

<h1>@books.size() book(s)</h1>

<ul>
    @for(book <- books) {
        <li>
            @book.label

            @form(routes.Application.deleteBook(book.id)) {
                <input type="submit" value="Delete">
            }
        </li>
    }
</ul>

<h2>Add a new book</h2>

@form(routes.Application.newBook()) {

    @inputText(bookForm("label")) 

    <input type="submit" value="Create">

 }

}

修改

1)我刚刚在Windows 8机器上从头开始安装了最新的播放版本,目前它是Play 2.3.1。我没有对Play框架进行任何修改。这是我的第一个游戏项目

2)完整错误(在Eclipse中):The method render(String) in the type index is not applicable for the arguments (List<Book>, Form<Book>)

3)当我尝试刷新浏览器时,代码已编译,我可以在屏幕上看到Book表单

1 个答案:

答案 0 :(得分:3)

即使您的计算机上安装了Play 2.3.1,此特定项目也会在project/plugins.sbt文件的此行中引用Play 2.2.0:

addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0")

所以它使用Play 2.2.0,它将由sbt下载,而不是您机器中其他地方安装的Play版本。

除了错误消息之外,Eclipse还会显示文件名和行号。如果单击错误消息,它应该打开该文件。在该项目中,它可能是test/ApplicationTest.java文件,其中包含以下行:

Content html = views.html.index.render("Your new application is ready.");

这是默认新应用程序模板的一部分,它应该被修改。此特定行无法编译,因为index视图需要作为参数List<Book>, Form<Book>而不是String。这在views/index.scala.html文件的这一行中说明:

@(books: List[Book], bookForm: Form[Book])

对于此示例项目,解决方案是删除文件test/ApplicationTest.java,因为它没有真正添加值,因为此测试不适用于此项目。在生产项目中,应该更新此文件,以便编译并通过测试。

尽管出现此错误,项目仍会运行,因为该代码仅针对test目标执行。但是Eclipse会显示所有目标的错误。