0

我对 JSTL 真的很陌生,并且无法准确掌握每个循环的工作原理。但是说在我的 java bean 中,我有一个非常简单的 while 循环,它通过并获取对象的属性。当我记录它时,我从循环中得到了预期的输出。这只是一个类似于headerTest, headerMetaTest的字符串。这是我的 java bean 中的代码:

Iterator<Resource> serviceList = null;
serviceList = resource.getChild("header").listChildren();

while(serviceList.hasNext()){
Resource child = serviceList.next();
headerTitle = child.adaptTo(ValueMap.class).get("headerTitle", "");
headerMeta = child.adaptTo(ValueMap.class).get("headerMeta, "");
}

但是,当我尝试在 JSTL 中访问它时,我什么也得不到:

<c:forEach var="child" items="${serviceList}">
    <p>${child.headerTitle}</p>
    <p>${child.headerMeta}</p>
</c:forEach>

令人费解的部分是我没有收到任何错误,没有任何东西简单地返回。有任何想法吗?真的,真的迷失了这个,非常感谢任何帮助。我是这方面的新手,所以代码示例是我学习的好方法,如果可能的话会很棒。

4

1 回答 1

1

在 JSP 页面中有四个范围需要注意。

页面、请求、会话和应用程序。

JSTL 标记通常会按该顺序查找属性。

页面映射到页面处理期间分配的属性,这些通常很少见。

request 用于分配给 ServletRequest 的属性,它们是最常用的属性,因为它们在页面请求期间持续存在,然后被丢弃。

例如

public void processMyServlet(ServletRequest request, ServletResponse){
    ...
    request.setAttribute("myAttribute",attributeValue);
    ...
}

session 用于分配给 HttpSession 的属性。这对于在用户会话期间经常使用的用户值很有用。

例如

public void processMyServlet(HttpServletRequest request, HttpServletResponse){
    ...
    request.getSession().setAttribute("myAttribute",attributeValue);
    ...
}

application 用于分配给 ServletContext 的属性,这对于在整个应用程序中保持一致且不会更改的值很有用。

例如

public void processMyServlet(HttpServletRequest request, HttpServletResponse){
    ...
    request.getServletContext().setAttribute("myAttribute",attributeValue);
    ...
}

如果您正在调用一个调度您的 jsp 的 servlet,那么至少您将需要。

request.setAttribute("serviceList",myResourceCollection); 

在 servlet 处理期间的某个地方。

如果您在 jsp 中做所有事情,那么您将需要类似的东西

<% java code to create collection

   request.setAttribute("serviceList",myResourceCollection); 
%>
于 2013-06-23T23:53:25.273 回答