Java Play 2.2.6:index.scala.html更新未反映在controller.Application

时间:2017-07-06 23:51:55

标签: java eclipse scala playframework

我是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;应该带一个字符串,并给我一个错误。

我已经在互联网上搜了好几个小时,并在发布自己的问题之前尝试了许多解决方案。

以下是我尝试过的一些事情:

  1. 将这些行添加到build.sbt(中间有空格):

    EclipseKeys.projectFlavor:= EclipseProjectFlavor.Java
    EclipseKeys.preTasks:= Seq(在编译中编译)

  2. 然后关闭日食。从我项目目录中的命令行,运行&#34;播放clean-all&#34; &#34;播放编译&#34; &#34;播放eclipse&#34;,然后将项目重新导入eclipse。

    1. 在eclipse中刷新一切

    2. 忽略错误并运行&#34;播放调试运行&#34;然后转到localhost:9000(一个人说这发生在他们身上,并且他们只是忽略了IDE中的错误并且它在服务器上工作正常),但是我在localhost中得到了同样的错误Eclipse,我屏幕上的镜头:

    3. scalaerror

      此时我不知道如何继续。我最好的猜测就像我说的那样,问题是申请由于某种原因不知道&#34;知道&#34;我更新了&#34; index.scala.html&#34;从而改变了'#34;渲染&#34;需要,但我不知道它为什么不知道&#34;它

      对不起,这太久了;我想确保包含所有内容。

      如果有人有任何想法会很棒,谢谢。

1 个答案:

答案 0 :(得分:0)

在您的控制器中

导入javafx任务类:

import com.sun.javafx.tk.Toolkit.Task;

但您的观点是期待您的模型类:

models.Task

将javafx任务导入更改为models.Task import。