2010-12-13 68 views
1

我有一個需要在應用程序的servletContext範圍內生存的類別列表,因爲列表將被每個視圖訪問,並且不需要修改。如何訪問gsp文件中的Grails ServletContext?

我試着在BootStrap.groovy的init方法中設置一個新的servletContext屬性,但我似乎無法訪問gsp文件中的servletContext。

這是我正在嘗試。如何從gsp文件訪問servletContext(應用程序)範圍屬性?


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 = { 
    } 
} 

 

這裏是我試圖在gsp文件中訪問它的地方。

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

回答

3

發現它!

而不是

servletContext.categories = categories 

servletContext.setAttribute("categories", categories) 

然後在GSP使用

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

你仍然可以使用

servletContext.categories = categories 

,並在GSP使用

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

設置它作爲一個屬性不需要