2010-12-13 90 views
1

J'ai une liste de catégories qui doivent vivre dans la portée servletContext de l'application puisque la liste sera accessible par chaque vue et n'aura pas besoin d'être modifiée.Comment accéder à Grails ServletContext dans un fichier gsp?

J'ai essayé de définir une nouvelle propriété servletContext dans la méthode init de BootStrap.groovy mais je ne semble pas pouvoir accéder au servletContext dans les fichiers gsp.

Voici ce que j'essaie. Comment accéder aux propriétés de portée servletContext (application) à partir d'un fichier gsp?


import org.codehaus.groovy.grails.commons.ApplicationHolder as AH 

import java.util.List 
import java.util.ArrayList 

class BootStrap { 

    def init = { 

     servletContext -> 

     def dataSource = AH.application.mainContext.dataSource 

     List categories 

     def sql = new Sql(dataSource); 
     def rows = sql.rows("select distinct catgry from cmpitmms"); 

     categories = new ArrayList(); 

     for (arg in rows) { 
      println arg.getAt(0) 
      if (!arg.getAt(0).trim().equals("")) { 
       categories.add(arg.getAt(0).trim()); 
      } 
     } 

     servletContext.categories = categories 

    } 
    def destroy = { 
    } 
} 

 

Voici où j'essaie d'y accéder dans le fichier gsp.

<ul> 
    <g:each var="category" in="${servletContext.categories}"> 
     <li><a href="category/${category}" title="${category}">${category}</a></li> 
    </g:each> 
</ul> 

Répondre

3

Trouvé!

Au lieu de

servletContext.categories = categories 

Do

servletContext.setAttribute("categories", categories) 

Puis dans l'utilisation gsp

<g:each var="category" in="${application.categories}"> 
    <li><a href="category/${category}" title="${category}">${category}</a></li> 
</g:each> 
2

Vous pouvez toujours utiliser

servletContext.categories = categories 

et dans l'utilisation gsp

<g:each var="category" in="${application.categories}"> 
    <li><a href="category/${category}" title="${category}">${category}</a></li> 
</g:each> 

Définition comme un attribut n'est pas nécessaire