2008-10-13 16 views

Respuesta

36

No afirmaré que esta es la manera correcta, pero es una forma de comenzar las cosas. No es necesario tener un controlador predeterminado. Agregar una asignación a UrlMappings.groovy:

class UrlMappings { 
    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 
     "500"(view:'/error') 
    "/" 
     { 
      controller = "quote" 
     } 
    } 
} 

A continuación, añada una acción índice para el controlador ahora por defecto:

class QuoteController { 

    def index = { 
     ... 
    } 
} 

Si lo que desea cargar ya forma parte de otra acción simplemente redirigir:

def index = { 
    redirect(action: random) 
} 

O realmente a conseguir un poco de reutilización en marcha, poner la lógica de un servicio:

class QuoteController { 

    def quoteService 

    def index = { 
     redirect(action: random) 
    } 

    def random = { 
     def randomQuote = quoteService.getRandomQuote() 
     [ quote : randomQuote ] 
    } 
} 
+2

Creo que los urlMappings probablemente deberían haber leído ' "/"{controlador: "cita"}'. No funcionó para mí hasta que cambié el "=" a un ":". –

+0

'static defaultAction =" random "' - en lugar de redirigir desde la acción de índice, puede agregar el campo estático de acción predeterminado al controlador con el nombre de la acción deseada como valor. – topr

4

La buena respuesta: Si necesita completar un modelo para la página de índice, es hora de pasar de usar un index.gsp directo a un controlador de índice.

La respuesta malvada: Si crea un filtro cuyo controlador es '*', se ejecutará incluso para páginas estáticas.

19

No pude obtener el ejemplo anterior de Ed T para que funcione. ¿Quizás Grails ha cambiado desde entonces?

Después de algunos experimentos y algunos hurgando en la red, que terminó con esto en UrlMappings.groovy:

"/"(controller: 'home', action: 'index') 

Mi HomeController se ve así:

class HomeController { 

    def index = { 
    def quotes = = latest(Quote.list(), 5) 
    ["quotes": quotes, "totalQuotes": Quote.count()] 
    } 

} 

Y en , tengo una index.gsp archivo. Eso hace que el archivo index.gsp en vistas sea innecesario, así que lo eliminé.

0

En griales 1.3.6 para limitarse a añadir

"/index.gsp"(uri:"/")

a UrlMappings.groovy funcionó bien para mí. Tiene el mismo efecto que agregar un nuevo controlador y mapeos como se describió anteriormente.

A continuación es mi completa UrlMappings.groovy:

class UrlMappings { 

    static mappings = { 
     "/$controller/$action?/$id?"{ 
      constraints { 
       // apply constraints here 
      } 
     } 

     "/"(view:"/index") 
     "500"(view:'/error') 

     "/index.gsp"(uri:"/") 
    } 
} 
+1

¿La redirección con uri funciona en UrlMappings? Lo intenté (para un uso ligeramente diferente), y no fue así. Obtuve un error de que el controlador era nulo. Tuve que recurrir a la redirección desde un controlador. – mcv