我有一个需要在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>
答案 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>
不需要将其设置为属性