Опробовав часть пользовательского редактора в руководстве по игре, я создал маршруты, как показано ниже
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
доступны согласно сообщениям запуска
обновление:
здесь показана трассировка стека, показанная игрой
Я пытался изменить порядок записей в файле маршрутов. Поставить * /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
Это то место, где 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