2010-08-12 1 views
2

У меня возникли проблемы переписывания URL, в Grails:Переписывание URL для действия по умолчанию в контроллерах

у меня есть 2 контроллера BlogController и ProjectsController каждый с по умолчанию def index = { } и согласования зрения.

Теперь, когда я создаю следующие ссылки:

<g:link controller="blog">Blog</g:link> 
<g:link controller="projects">Projects</g:link> 

Они получают переведены на http://localhost:8080/myapp/blog/index и http://localhost:8080/myapp/projects/index. Но имейте в виду, что они (и все остальные действия по умолчанию для контроллеров) не имеют конца /index.

Может ли кто-нибудь помочь мне сделать это?

ответ

3

Попробуйте указать действие параметр в ссылке бирка как пространство.

<g:link controller="projects" action=" ">Projects</g:link> 
+0

Работает как очарование, спасибо. – Jasper

1

Попробуйте использовать a Named URL Mapping

Добавьте это в grails-app/conf/UrlMappings.groovy

name blog: "/blog" { 
      controller = "blog" 
      action = "index" 
    } 
    name projects: "/projects" { 
      controller = "projects" 
      action = "index" 
    } 

и изменить свои ссылки с помощью параметра отображения:

<g:link mapping="blog">Blog</g:link> 
<g:link mapping="projects">Projects</g:link> 
+0

Это работает, но на самом деле оно не очень хорошо масштабируется. Каждому контроллеру понадобится его собственное именованное отображение. – Jasper

+0

Именованные сопоставления на самом деле чрезмерны. Если вы просто предоставляете отображение/blog правильному контроллеру/действию, тег ссылки будет переназначать его правильно. Таким образом, «/ blog» (контроллер: «блог», действие: «индекс») - это все, что нужно. Тег link w/controller = "blog" action = "index" будет правильно отображаться в "/ blog". – tixxit