Как вы получаете доступ к Grails ServletContext в файле gsp? - PullRequest
1 голос
/ 13 декабря 2010

У меня есть список категорий, которые должны находиться в пределах области действия servletContext приложения, так как список будет доступен для каждого представления и не нуждается в изменении.

Я попытался установить новый servletContextсвойство в методе init BootStrap.groovy, но я не могу получить доступ к servletContext в файлах gsp.

Вот что я пытаюсь.Как получить доступ к свойствам области действия servletContext (приложения) из файла 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 = {
    }
}


Здесь я пытаюсь получить к нему доступ в файле gsp.

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

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

Нашел!

Вместо

servletContext.categories = categories

Do

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 голосов
/ 02 октября 2011

Вы все еще можете использовать

servletContext.categories = categories

и в gsp используйте

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

Установка его в качестве атрибута не нужна

...