我是Java Play的新手,我正在使用2.2.6版,因为我在Windows机器上无法使最新版本正常工作。
我正在完成2.2.6版本的教程here,并在名为"渲染第一页,"的部分遇到了问题。位于教程中大约三分之二的位置。
该教程展示了如何制作一个简单的待办事项清单" Java Play中的应用程序,其中包含一个表单,用户可以在其中提交"做"项目,然后出现在屏幕上,并删除它们。
In"渲染第一页,"本教程指示用户将以下代码添加到控制器" Application.java" :
public static Result tasks(){
return ok(views.html.index.render(models.Task.all(), taskForm);
}
所以,在这一点上,我的Application.java看起来像这样:
package controllers;
import java.util.ArrayList;
import java.util.List;
import com.sun.javafx.tk.Toolkit.Task;
import play.*;
import play.mvc.*;
import play.data.*;
import models.*;
import views.html.*;
public class Application extends Controller {
static Form<Task> taskForm = Form.form(Task.class);
public static Result index() {
return ok("Hello World");
}
public static Result tasks() {
return ok(
views.html.index.render(models.Tasks.all(), taskForm)
);
}
public static Result newTask() {
return TODO;
}
public static Result deleteTask(Long id) {
return TODO;
}
}
Eclipse立刻强调了“#34; render&#34;红色,当我将鼠标悬停在它上面时出现以下错误:&#34;类型索引中的方法render(String)不适用于参数(List,Form)&#34;
本教程让我创建了一个名为Task.java的模型,如果你看一下Application.java的顶部,它还有我&#34; import com.sun.javafx.tk.Toolkit.Task,&# 34;我并不确定它的作用。
这是我的模型,Task.java:
package models;
import java.util.*;
import play.data.validation.Constraints.*;
public class Task {
public Long id;
@Required
public String label;
public static List<Task> all(){
return new ArrayList<Task>();
}
public static void create(Task task){
}
public static void delete(Long id){
}
}
所以,所有这一切,我认为问题在于:
&#34;渲染&#34;参数在视图中定义&#34; index.scala.html&#34;,在scala中
首次在java play中创建空白Java应用程序时,它会使用以下代码行自动填充index.scala.html:
@(message: String)
@main("Welcome to Play") {
@play20.welcome(message, style = "Java")
}
教程让我删除了index.scala.html中的所有内容,就像我说的是一个视图,让我用这段代码替换它:
@(tasks: List[Task], taskForm: Form[Task])
@import helper._
@main("Todo list") {
<h1>@tasks.size() task(s)</h1>
<ul>
@for(task <- tasks) {
<li>
@task.label
@form(routes.Application.deleteTask(task.id)) {
<input type="submit" value="Delete">
}
</li>
}
</ul>
<h2>Add a new task</h2>
@form(routes.Application.newTask()) {
@inputText(taskForm("label"))
<input type="submit" value="Create">
}
}
现在,index.scala.html中的第一行是告诉控制器什么参数&#34;渲染&#34;需要。如您所见,当您创建一个空白的Java Play应用程序时,它开始是@(message:String)。我把它改为@(tasks:List [Task],taskForm [Task])。所以它应该知道那些是#&#34;渲染&#34;应采取。但出于某种原因,它仍然认为&#34;渲染&#34;应该带一个字符串,并给我一个错误。
我已经在互联网上搜了好几个小时,并在发布自己的问题之前尝试了许多解决方案。
以下是我尝试过的一些事情:
将这些行添加到build.sbt(中间有空格):
EclipseKeys.projectFlavor:= EclipseProjectFlavor.Java
EclipseKeys.preTasks:= Seq(在编译中编译)
然后关闭日食。从我项目目录中的命令行,运行&#34;播放clean-all&#34; &#34;播放编译&#34; &#34;播放eclipse&#34;,然后将项目重新导入eclipse。
答案 0 :(得分:0)
导入javafx任务类:
import com.sun.javafx.tk.Toolkit.Task;
但您的观点是期待您的模型类:
models.Task
将javafx任务导入更改为models.Task import。