我是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);
我不确定发生了什么。有人能帮助我吗?
答案 0 :(得分:1)
第一个问题在于JSTL jar没有包含在您的类路径中,但是在评论中已经解决了这个问题。
由于您是通过静态服务方法检索对象列表,我建议将其重构为后端,如下所示:
request.setAttribute("livros", LivroService.getAll());
原因是表达式引擎尝试通过PageContext
,Request
,Session
和Servlet Context
的属性映射来解析变量 - 以该顺序。 Scriptlet是页面上的原始Java语句,如果在表达式中引用则不会被解析。
如果您按照建议重构代码,${ livros }
将按照您的意图解决,因为它已作为属性添加到请求中。