Задать вопрос
@seys

Scala/Play too many arguments for method apply. Кто-нибудь сталкивался?

Делаю пример по книжке Mastering play framework for scala Shiti Saxena. Застрял в этом месте

Когда создаю контроллер TaskController, Idea ругается
class TaskController extends Controller{

  def index = Action{
   Redirect(routes.TaskController.tasks)
  }
  def tasks = Action{
    Ok(views.html.index(Task.all)) //Вот тут пишет too many arguments for method apply и не компилируется
  }

  def newTask = Action(parse.urlFormEncoded) {
    implicit request =>
      Task.add(request.body.get("taskName").get.head)
      Redirect(routes.TaskController.index)
  }
  def deleteTask(id: Int) = Action {Task.delete(id)
    Ok
  }


Вот, что в консоле пишет


[info] Done updating.
[info] Compiling 9 Scala sources and 1 Java source to D:\IdeaProjects\untitled1\target\scala-2.11\classes...
[error] D:\IdeaProjects\untitled1\app\controllers\TaskController.scala:15: too many arguments for method apply: ()play.twirl.api.HtmlFormat.Appendable in class index
[error] Ok(views.html.index(Task.all))
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 26 s, completed 11.07.2016 12:22:19


Пробовал и в линуксе и виндозе, та же проблема. Искал ответы на разных зарубежных форумах, но везде ответы были не по теме. Кто-нибудь сталкивался с такой проблемой или она только у меня одного?
  • Вопрос задан
  • 529 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
mrRontgen
@mrRontgen
Scala lover.
Скорее всего у Вас в этом темплейте views.html.index неверные аргументы в первой сточке)
Ответ написан
Комментировать
@seys Автор вопроса
я все делал точно по книжке, как это можно исправить?

вот сам темплейт на который ругается index.scala.html

@main("Task Tracker") {
    <h2>Task Tracker</h2>

    <div>
        <form>
            <input type="text" name="taskName" placeholder="Add a new task" required>
            <input type="submit" value="Add">
        </form>

    </div>
}


а вот класс модели Task

package models

case class Task(id: Int, name: String)

object Task {
  private var taskList: List[Task] = List()

  def all: List[Task] = {
    taskList
  }

  def add(taskName: String) = {
    val newId: Int = taskList.last.id + 1
    taskList = taskList ++ List(Task(newId, taskName))
  }

  def delete(taskId: Int) = {
    taskList = taskList.filterNot(task => task.id == taskId)
  }
}


да, я уже добавил, вот еще SampleAppController и main.scala.html

package controllers

import play.api.mvc.{Action, Controller}
import play.api.templates
import play.twirl.api.Html

class SampleAppController extends Controller {

  def index = Action {
    val content = Html("<div>This is the content for the sample app</div>")
    Ok(views.html.main("Home")(content))
  }

  def faq = Action {
    val content = Html("<div>This is the content from faq</div>")
    Ok(views.html.main("Faq")(content))
  }

  def contactUs = Action {
    val content = Html("<div>This is the content from contact us</div>")
    Ok(views.html.main("Contact us")(content))
  }

  def about = Action {
    val content = Html("<div>This is the content from about</div>")
    Ok(views.html.main("About")(content))
  }

}


@(title: String)(content: Html)

<!DOCTYPE html>

<html>
    <head>
        <title>@title</title>
        <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
        <link rel="shortcut icon" type="image/png" href="@routes.Assets.at("images/favicon.png")">
        <script src="@routes.Assets.at("javascripts/jquery-1.9.0.min.js")" type="text/javascript"></script>
    </head>
    <body>
        @content
    </body>
</html>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы