如何在gsp文件中访问Grails ServletContext?

时间:2010-12-13 18:36:38

标签: grails scope gsp servlets

我有一个需要在app的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>

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:2)

你仍然可以使用

servletContext.categories = categories

并在gsp中使用

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

不需要将其设置为属性