Play Framework 2.2.1 – 编译错误:“类索引中的方法呈现不能应用于给定类型;”

我是Play Framework的新手,并尝试从本手册中构建Todo列表。

当我尝试运行应用程序时,我收到错误:

Compilation Error error: method render in class index cannot be applied to given types; 

我的代码是(相关部分):

MainController.java

 final static Form 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]) 

我环顾四周,我找到的最接近的线程是这个 ,但我无法使用它来解决问题(可能是由于对环境/框架缺乏了解……)。

最后一件值得一提的事:
如果我将’index.sacala.html’更改为无参数(并相应地更改’MainController’,一切都很完美。

非常感谢有关解决此编译错误的任何想法。

编辑:
Task.all()代码是:

 public static List all() { return new ArrayList(); } 

最有可能你的包装是models不是Models不是吗?

BTW这个包是自动import的,所以你可以使用:

  @(tasks: List[Task], taskForm: Form[Task]) 

嗯,改变……实际登录控制台说一切

 [error] /www/play20apps/testing/Todo-List/app/controllers/MainController.java:24: error: method render in class index cannot be applied to given types; [error] return ok(views.html.index.render(Task.all(), taskForm)); [error] ^ [error] required: List,play.api.data.Form [error] found: List,play.data.Form [error] reason: actual argument play.data.Form cannot be converted to play.api.data.Form by method invocation conversion [error] 1 error 

特别是这些线:

 [error] required: List,play.api.data.Form [error] found: List,play.data.Form 

TBH我没有测试过Activator,但看起来将play.api.data.Form导入到视图中,这对Java控制器来说是不正确的。 解决方案是Form的完全限定路径:

 @(tasks: java.util.List[Task], taskForm: play.data.Form[Task]) 

正如评论中提到的*.api.*导入用于Scala,而普通用于Java,这是Play 2中的拇指规则。

PostScriptum:刚刚意识到在你的build.sbt你有play.Project.playScalaSettings ,实际上它应该是play.Project.playJavaSettings ,这个更改修复了你的Activator问题。

看起来Task.all()返回一个Java列表,而scala模板可能需要一个Scala列表。

我建议如果可能的话,建议更改Task.all()的返回类型,或者完全限定模板中的定义:

 @(tasks: java.util.List[Models.Task], taskForm: Form[Models.Task]) 

虽然biesior的答案有一些很好的见解和提示,但它并没有解决问题。
最后,我已经减少了类型TypeSafe Activator,并使用play comamnd line从头开始创建了网站,它运行得很好。

我从来没有在问题中找到问题的根源,我将这个答案留给googlers的未来参考。

如果任何人有更好的解决方案,请留下您的答案,如果有效,我会将其标记为已接受。


编辑:

@biesior非常友好地通过我的代码,他确实找到了问题。 如果您遇到同样的问题,请查看他的答案。