проблема игрового фрейма с маршрутами: NoRouteFoundException - PullRequest
1 голос
/ 20 августа 2011

Опробовав часть пользовательского редактора в руководстве по игре, я создал маршруты, как показано ниже

GET     /admin/myPosts/{id}                     Admin.form
GET     /admin/new                              Admin.form
POST    /admin/new                              Admin.save

GET      /admin?                                Admin.index
*        /admin                                 module:crud

и создал методы в классе администратора

..
public static void form() {
        logger.info("Admin.form()");
        render();
    }       
    public static void save(String title,String content,String tags) {
        User author = User.find("byEmail",Security.connected()).first();
        logger.info("author="+author.getEmail());
        //create a post
        Post newPost = new Post(author,title,content);
        logger.info("new post="+newPost.getTitle()+" created");
        //set tags
        String[] tagArray = tags.split("\\s+");
        logger.info("tag array="+tagArray.length);
        for(String tag : tagArray ) {
            logger.info("tag="+tag);
            if(tag.trim().length() > 0) {
                newPost.getTags().add(Tag.findOrCreateByName(tag));
            }               
        }
        validation.valid(newPost);
        if(validation.hasErrors()) {
            logger.error("error in post");
            render("@form", newPost);
        }
        newPost.save();
        logger.info("new post saved");
        logger.info("going to index");
        index();

    }       
    public static void form(Long id) {
        if(id!=null) {
            Post post = Post.findById(id);
            render(post);
        }
        render();
    }
...

просмотров / Admin / index.html -

#{extends 'admin.html'/}
Welcome ${user}!! <span>you have written ${posts.size()?:'no'} ${posts.pluralize('post','posts')} so far </span>

#{list items:posts,as:'post' }
    <p class="post ${post_parity}">
        ${post_index}.<a href="@{Admin.form(post.id)}">${ post.title}</a>
    </p>
#{/list}
<p id="newPost">
    <a href="@{form()}"><span>+</span>write new post</a>
</p>

Когда я нажимаю на логин, строка, содержащая ссылку "@{Admin.form(post.id)}" вызывает

Internal Server Error (500) for request GET /admin?

No route found (In /app/views/Admin/index.html around line 7)
No route able to invoke action Admin.form was found.

play.exceptions.NoRouteFoundException: No route found
    at play.templates.BaseTemplate.throwException(BaseTemplate.java:80)
    at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:237)
    at play.templates.Template.render(Template.java:26)
    at play.templates.GroovyTemplate.render(GroovyTemplate.java:184)
    at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
    at play.mvc.Controller.renderTemplate(Controller.java:659)
    at play.mvc.Controller.renderTemplate(Controller.java:639)
    at play.mvc.Controller.render(Controller.java:694)
    at controllers.Admin.index(Admin.java:33)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:543)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:499)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:475)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:470)
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:158)
    at Invocation.HTTP Request(Play!)

Как мне решить эту проблему? Может кто-то помочь? Есть ли проблема в порядке путей в маршрутах? Модули crud and secure доступны согласно сообщениям запуска

обновление: здесь показана трассировка стека, показанная игрой

application error page

Я пытался изменить порядок записей в файле маршрутов. Поставить * /admin path before GET / admin? as below .. Теперь я получаю странно визуализированную страницу

GET     /admin/myPosts/{id}                     Admin.form
GET     /admin/new                              Admin.form
POST    /admin/new                              Admin.save

*        /admin                                 module:crud
GET      /admin?                                Admin.index

weird page Это то место, где bob @ gmail заканчивается при входе в систему! Для URL http://localhost:9000/admin? на странице должна отображаться ссылка MyPosts в качестве выбранной ... но здесь ссылка Комментарии отображается в виде выбранной ..

Итак, это должно быть проблема с порядком путей в файле маршрутов ... в частности, из * /admin? .. может кто-нибудь сказать мне, где именно он должен быть помещен?

Произошла небольшая проблема в файле маршрутов (отсутствует /) файл полных маршрутов

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

#import crud routes

GET     /admin/myPosts/{id}                     Admin.form
GET     /admin/new                              Admin.form
POST    /admin/myPosts/{id}                     Admin.save
POST    /admin/new                              Admin.save

GET     /admin/?                                Admin.index
*       /admin                                  module:crud

# Home page
GET     /                                       Application.index

# details of a post
GET     /posts/{<[0-9]+>id}                             Application.showPost
GET     /captcha                                Application.captcha
GET     /posts/{tag}                            Application.taggedWith
POST    /posts/{<[0-9]+>id}/comments                    Application.postComment

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
# Import Secure routes
*       /                                       module:secure
*       /{controller}/{action}                  {controller}.{action}

Страница администратора отображается правильно, когда я пропускаю ссылку Admin.form(post.id) в index.html

#{list items:posts,as:'post' }
    <p class="post ${post_parity}">
        ${post_index}.<a href="#">${ post.title}</a>
    </p>
#{/list}
<p id="newPost">
    <a href="@{Admin.form()}"><span>+</span>write new post</a>
</p>

Как только ссылка будет добавлена ​​

#{list items:posts, as:'post'}
    <p class="post ${post_parity}">
        <a href="@{Admin.form(post.id)}">${post.title}</a>
    </p>
#{/list}

Появляется сообщение об ошибке No route able to invoke action Admin.form was found

Ответы [ 2 ]

2 голосов
/ 21 августа 2011

Путаница была вызвана тем, что в классе Admin было 2 метода form (), один без аргумента arg, другой с идентификатором arg. Метод no arg не был помещен до другого .. из-за маршрутизатора возникла путаница ..

Проблема была решена, когда метод form () был заменен на формой метода (Long id)

0 голосов
/ 20 августа 2011

Вы уверены, что именно этот маршрут вызывает проблему?Я только что попробовал этот сценарий и не могу воссоздать ошибку (хотя и не использую модули CRUD и Secure), однако, поскольку эти маршруты появляются позже в файле маршрутов, они не должны вызывать проблемы.

Я думаю, что это можетбыть следующей строкой кода, вызывающей проблемы.

 <a href="@{form()}"><span>+</span>write new post</a>

В частности, этот бит @{form()}

Я думаю, что он, вероятно, должен читать

@{Admin.form()}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...