从JSTL标记内部访问JSP变量

时间:2014-06-05 17:49:37

标签: jsp variables jstl

我是Java的新手,我正在试图弄清楚如何在JSTL内容部分中打印变量。我不确定我是否正确地执行此操作但无法使其正常工作(实际上它适用于scriptlet)。

所以,这是代码:

的index.jsp

<%@page import="java.util.ArrayList,model.Livro,service.LivroService" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib tagdir="/WEB-INF/tags" prefix="t" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<% ArrayList<Livro> livros = LivroService.getAll(); %>

<t:admin>
    <jsp:attribute name="content">
        <h2 class="page-header">
            Livros cadastrados
            <span class="pull-right"><a href="criar.jsp" class="btn btn-default btn-sm">Cadastrar livro</a></span>
        </h2>        

        <c:forEach var="livro" items="${livros}">
            <c:out value="${livro.titulo}" />
        </c:forEach>
    </jsp:attribute>
</t:admin>

编译时我得到这样的错误:

  

/home/raphael/NetBeansProjects/LingProg/build/generated/src/org/apache/jsp/admin/livro/index_jsp.java:105:   错误:包org.apache.taglibs.standard.tag.rt.core不存在       org.apache.taglibs.standard.tag.rt.core.ForEachTag _jspx_th_c_forEach_0 =(org.apache.taglibs.standard.tag.rt.core.ForEachTag)   _jspx_tagPool_c_forEach_var_items.get(org.apache.taglibs.standard.tag.rt.core.ForEachTag.class);

我不确定发生了什么。有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

第一个问题在于JSTL jar没有包含在您的类路径中,但是在评论中已经解决了这个问题。

由于您是通过静态服务方法检索对象列表,我建议将其重构为后端,如下所示:

request.setAttribute("livros", LivroService.getAll());

原因是表达式引擎尝试通过PageContextRequestSessionServlet Context的属性映射来解析变量 - 以该顺序。 Scriptlet是页面上的原始Java语句,如果在表达式中引用则不会被解析。

如果您按照建议重构代码,${ livros }将按照您的意图解决,因为它已作为属性添加到请求中。