2017-01-27 9 views
2

У меня есть простой новый контроллер и попытался определить мои маршруты. Все кажется правильным, но я получаю сообщение об ошибке. Код взят из Manning Play для Java.PlayFramework начинающий. Ошибка определения маршрута

Продукция Контроллер:

package controllers; 

import play.mvc.*; 
import play.mvc.Controller; 
import play.mvc.Result; 

public class Products extends Controller { 

//list all products 
public static Result list(){ 
    return TODO; 
} 

//return empty form for adding 
public static Result newProduct(){ 
    return TODO; 
} 

//product edit form 
public static Result details(String ean){ 
    return TODO; 
} 

//save a product 
public static Result save(){ 
    return TODO; 
} 

} 

Маршруты:

GET /       controllers.HomeController.index 

GET  /count      controllers.CountController.count 

GET  /message     controllers.AsyncController.message 


GET  /assets/*file    controllers.Assets.versioned(path="/public", file: Asset) 

GET  /products     controllers.Products.list 
GET  /products/new    controllers.Products.newProduct 
GET  /products/:ean    controllers.Products.details(ean: String) 
POST /products/     controllers.Products.save 

Ошибки:

Compiling 6 Scala sources and 11 Java sources to /Users/andrei/Desktop/PlayFramework/target/scala-2.11/classes... 
[error] /Users/andrei/Desktop/PlayFramework/conf/routes:15: value list is not a member of controllers.Products 
[error] GET  /products     controllers.Products.list 
[error] /Users/andrei/Desktop/PlayFramework/conf/routes:16: value newProduct is not a member of controllers.Products 
[error] GET  /products/new    controllers.Products.newProduct 
[error] /Users/andrei/Desktop/PlayFramework/conf/routes:17: value details is not a member of controllers.Products 
[error] GET  /products/:ean    controllers.Products.details(ean: String) 
[error] /Users/andrei/Desktop/PlayFramework/conf/routes:18: value save is not a member of controllers.Products 
[error] POST /products/     controllers.Products.save 
[error] four errors found 
+0

попробуйте использовать 'return ok()' вместо 'return TODO' –

+0

@AsadSarwar, TODO здесь не проблема – Mysterion

ответ

1

Начиная с версии 2.5, воспроизведение начинается с использованием InjectedRoutesGenerator, который будет запрещать static контроллеры методы. Таким образом, простым решением будет удалить ключевое слово static.

Но, если вы действительно хотите иметь статические методы (я не понимаю, почему), вы могли бы пользователь наследие (до 2.5.0) static маршрутов генератор, который предполагает, что все действия static методы

Вы можете настроить Play для использования устаревших (pre 2.5.0) статических маршрутов генератор, который предполагает, что все действия являются статическими методами. К сконфигурируйте проект, добавьте следующее в build.sbt:

routesGenerator: = StaticRoutesGenerator Мы рекомендуем всегда использовать генератор введенных маршрутов . Генератор статических маршрутов существует прежде всего как инструмент для облегчения миграции, так что существующим проектам необходимо сделать все свои контроллеры нестационарными одновременно.

При использовании генератора статических маршрутов, вы можете указать, что действие имеет впрыскивается контроллер предваряя действие с @, например, так:

GET/некоторые/путь @ controllers.Application.index()

+0

спасибо. Это помогло! –