I am new to Play Framework, and attempting to build a Todo-list from this manual.
When I try to run the application I get the error:
Compilation Error
error: method render in class index cannot be applied to given types;
My code is (the relevant parts):
MainController.java:
final static Form<Task> taskForm = Form.form(Task.class);
public static Result tasks() {
return ok(
views.html.index.render(Task.all(), taskForm)
);
}
index.sacala.html:
@(tasks: List[Models.Task], taskForm: Form[Models.Task])
I looked around, the closest thread I found was this one, but I was not able to resolve the issue using it (might be due to lack of understanding of the environment / framework...).
One last thing that is worth mentioning:
If I change 'index.sacala.html' to be parameter-less (and change the 'MainController' accordingly, everything works perfectly.
Would appreciate any thoughts about resolving this compilation error.
EDIT:
The Task.all()
code is:
public static List<Task> all() {
return new ArrayList<Task>();
}
Most probably your package is
models
NOTModels
isn't it?BTW this package is autoimported so you can just use:
Hm, changes... Actually log in the console says everything
especially these lines:
TBH I didn't ever test the Activator but it looks that imports
play.api.data.Form
into views, which is incorrect for Java controllers. solution is full qualified path for Form:As mentioned in comment
*.api.*
imports are for Scala and normal are for Java, that's the rule of the thumb in Play 2.+PostScriptum: Just realized that in your
build.sbt
you haveplay.Project.playScalaSettings
and actually it should beplay.Project.playJavaSettings
, this change fixes your problems with Activator.It looks like
Task.all()
returns a Java list, while the scala template is probably expecting a Scala list.I woul suggest changing the return type of
Task.all()
if possible, or fully qualified the definition in the template:Although biesior's answer has some nice insights and tips, it did not solve the issue.
At the end I have abndoned type TypeSafe Activator and created the site from scratch using play comamnd line and it worked perfectly.
I never found the origin of the issue in the question, I am leaving this answer for a future reference for the googlers.
If any one has a better solution, please leave your answer and if it works I will mark it as accepted.
EDIT:
@biesior was kind enough to go through my code and he did find the issue. If you have the same issue, take a look at his answer.