【问题标题】:JSTL - Output not coming as expectedJSTL - 输出未按预期进行
【发布时间】:2012-02-08 11:18:01
【问题描述】:

下面是我在 index.jsp 中使用 jstl 1.2 的代码。

 <%@ taglib prefix = "c" uri="http://java.sun.com/jstl/core"%>
 <% String[] setName = {"Hello", "you", "are", "using", "jstl", "in", "jsp"};
 request.setAttribute("getName", setName);
 %>
 <html>
 <body>
 <table>
 <tr><td>Print</td></tr>
 <c:forEach var="itemName" items="#{getName}" >
 <tr>
 <td>${itemName}</td>
 </tr>
 </c:forEach>
 </table>
 </body>
 </html>

我期待的输出如下

 Print
 Hello
 you
 are
 using
 jstl
 in
 jsp

但下面是我得到的

  Print
  #{name}

请告诉我我在哪里失踪

以下是我在 WEB-INF/lib 文件夹中的唯一 jar 文件 jstl-1.2.jar

提前致谢

法希姆

注意:添加Java和JSP标签作为了解Java和JSP的人可能也知道JSTL...

【问题讨论】:

  • 请注意当我在 JSF 项目中运行相同的代码时,代码正在运行并显示我想要的输出。现在我在 Ecpise 中的 Web 动态项目下做同样的事情 我错过了任何 jar 文件吗??
  • 好吧好吧,我有问题了...我应该使用&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;而不是&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %&gt;

标签: java jsp jstl


【解决方案1】:

这里,

<%@ taglib prefix = "c" uri="http://java.sun.com/jstl/core"%>

您指定了错误的 JSTL 标记库 URL。这是针对 JSTL 1.0 的。在 JSTL 1.1 之后,它需要在路径中使用 /jsp。另请参阅JSTL 1.1 tag library documentation。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

至于代码(以及回复所有抱怨使用${} 的重复答案),#{} 语法仅在您将 Servlet 2.5 / 2.1 兼容容器与符合 Servlet 2.5 规范的 web.xml。 Tomcat 6.0 就是这种容器的一个例子。 #{} 确实不适用于旧容器(例如 Tomcat 5.5 或更早版本)上的 JSP 标记。

为清楚起见并避免初学者混淆,最好在 JSP 标记中始终使用${}。还最好使用自记录变量名称。

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<% 
    String[] names = {"Hello", "you", "are", "using", "jstl", "in", "jsp"};
    request.setAttribute("names", names);
%>
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>JSTL demo</title>
    </head>
    <body>
        <table>
            <tr><td>Print</td></tr>
            <c:forEach items="${names}" var="name">
                <tr><td>${name}</td></tr>
            </c:forEach>
        </table>
    </body>
</html>

另见:

【讨论】:

  • 感谢 BalusC 的详细解释...我昨天发现了这个问题并添加了相同的评论...仍然感谢您分享有关此的更多信息...。
  • 我有一个问题:当我使用items=${names} 时,我收到了无效属性(项目)的错误。我正在使用 Tomcat 6.0,xml 中的 Servlet 版本是 2.5。正如您上面提到的,**为了清楚起见并避免初学者混淆,最好在 JSP 标记中始终使用 ${}。最好使用自记录变量名。**,这对我不起作用,因为我遇到了上面提到的错误...请建议我应该使用什么($ 或 #)...提前谢谢
  • 你需要引用它items="${names}",正如错误消息试图告诉你的那样(如我的回答所示)
  • 很抱歉造成混淆..我使用的是items="${names}"...仍然出现上述错误...
【解决方案2】:

在 JSTL 1.2 中,您不想在纯 JSP 中使用 #{name},那只是 JSF 工件。相反,只需使用 ${name}。

【讨论】:

  • 当我使用${name} 时,我得到"org.apache.jasper.JasperException: /index.jsp(9,33) quote symbol expected" 的异常
  • 对于 ${name},我收到错误,因为 Invalid attribute (items)
【解决方案3】:

您需要使用 ${name} 等表达语言来引用项目

U r 在名称前使用 # 而不是 $

如果问题解决了,请告诉我。

【讨论】:

    【解决方案4】:

    #{name} 不是有效的 Java 变量引用 - 看起来您将它与 JQuery 选择器混淆了。 无论如何尝试只使用 items="${name}"

    【讨论】:

    • 当我使用 items="name" 我得到 o/p 为 Print name
    • 注意:这是一个简单的 Web 应用程序项目,而不是任何 JSF 项目。在 lib 中,我有 Web 应用程序所需的通用 jar 文件,所以我只添加了 jstl1.2.jar 文件让我知道我是否在这里遗漏了任何 jar 文件......另外,当我在 JSF 项目中运行相同的代码时,它正在运行并向我显示所需的输出...
    • 请注意引号,不要忘记 em :)
    • 当我使用 ${name} 时,下面是异常我得到org.apache.jasper.JasperException: /index.jsp(9,33) quote symbol expected org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.jav‌​a:40) 也显示错误为无效属性(项目) 下面是我有&lt;c:forEach var="itemName" items="${name}"&gt;
    • 我缺少任何 jar 文件吗?还要检查我在实际帖子中添加的注释...
    【解决方案5】:

    #{name} 应该是 ${name}

    哦!可能是与 JSTL 相关的罐子。检查薄 link 以将这些 jar 包含在您的项目中

    【讨论】:

    • 当我使用${name} 时,下面是异常我得到org.apache.jasper.JasperException: /index.jsp(9,33) quote symbol expected org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:40)
    • 同样显示错误为Invalid attribute (items)&lt;c:forEach var="itemName" items="${name}"&gt;
    • 要么使用 ${requestScope.name} 要么尝试 pageContext.setAttribute() 而不是 request.setAttribute()
    • 我发布的实际代码在使用 JSF 创建的项目中运行,这是一个简单的 Web 动态项目。我觉得我缺少一些 jar 文件或者奇怪的东西......同样,我发布的内容是在为 JSF 创建的项目中运行的早期......
    • taglib 声明也是错误的。使用&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;
    【解决方案6】:

    下面是我正在使用的最终代码,它正在运行...

    张贴以便有人可以使用它......明天可能会帮助我;)

     <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    
     "http://www.w3.org/TR/html4/loose.dtd">
    
     <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
     <% String[] setName = {"Hello", "you", "are", "using", "jstl", "in", "jsp"};
     request.setAttribute("getName", setName);
     %>
     <html>
     <body>
     <table>
     <tr><td>Print</td></tr>
     <c:forEach var="itemName" items="#{getName}">
     <tr>
     <td>${itemName}</td>
     </tr>
     </c:forEach>
     </table>
     </body>
     </html>
    

    学习:我使用的是&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %&gt;而不是&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-10-07
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2015-12-14
      • 2012-09-24
      相关资源
      最近更新 更多