开发者

How do you Access Grails ServletContext in a gsp file?

I have a list of categories that need to live inside of the servletContext scope of the app since the list will be accessed by every view and will not need to be modified.

I tried setting a new servletContext property in the init method of BootStrap.groovy but I don't seem to be able to access the servletContext in the gsp files.

Here is what I'm trying. How do I access servletContext (application) scope properties from a gsp file?


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


Here is where I'm trying to access it in the gsp file.

<ul>
    <g:each var="category" in="${开发者_开发百科servletContext.categories}">
        <li><a href="category/${category}" title="${category}">${category}</a></li>
    </g:each>
</ul>


Found it!

Instead of

servletContext.categories = categories

Do

servletContext.setAttribute("categories", categories)

Then in the gsp use

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


You could still use

servletContext.categories = categories

and in the gsp use

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

Setting it as a attribute is not needed

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜