Reputation: 6852
I'm reading the book Learn Java for Web Development and trying to execute code examples from the book.
I have a problem with Play Framework code example (chapter 8).
Exception:
"render(java.util.List,play.data.Form) in views.html.index cannot be applied to (java.lang.String)"
Controller class :
final static Form<Book> bookForm = Form.form(Book.class);
public static Result books(){
return ok(views.html.index.render(Book.all(),bookForm));
}
View - 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">
}
}
Edit:
1) I just installed latest play version from scratch on Windows 8 machine, for the moment it's Play 2.3.1 . I didn't any modifications for Play framework . It's my first play project
2) Full error (in Eclipse): The method render(String) in the type index is not applicable for the arguments (List<Book>, Form<Book>)
3) When I try to refresh my browser , code compiled and I can see Book form on a screen
Upvotes: 2
Views: 2169
Reputation: 22375
Even though you have Play 2.3.1 installed in your machine, this particular project references Play 2.2.0 in this line in the project/plugins.sbt
file:
addSbtPlugin("com.typesafe.play" % "sbt-plugin" % "2.2.0")
So it's using Play 2.2.0, which will be downloaded by sbt
, and not the Play version installed elsewhere in your machine.
In addition to the error message, Eclipse also shows the file name and line number. It should open that file if clicking on the error message. In that project, it's probably the test/ApplicationTest.java
file, which has this line:
Content html = views.html.index.render("Your new application is ready.");
This is part of the default new application template and it's supposed to be modified. This particular line does not compile because the index
view expects as arguments List<Book>, Form<Book>
and not a String
. This is stated in this line of the views/index.scala.html
file:
@(books: List[Book], bookForm: Form[Book])
For this example project, the solution is to delete the file test/ApplicationTest.java
, since it's not really adding value because this test does not work with this project. In a production project, this file should be updated so that it compiles and passes the test.
The project runs despite this error because that code is only executed for the test
target. Eclipse will show errors for all targets, though.
Upvotes: 3