【问题标题】:According to TLD or attribute directive in tag file, attribute items does not accept any expressions [duplicate]根据标签文件中的TLD或属性指令,属性项不接受任何表达式[重复]
【发布时间】:2012-11-05 21:33:47
【问题描述】:

我有一个项目需要在 HTML 页面中显示电影的详细信息。尽管我没有使用 Spring 或 Struts 之类的任何框架,但我必须严格遵循 MVC。我也不允许使用 scriptlet,而是使用 JSTL 和表达式语言。我通常从数据库中检索数据,然后将其设置为 bean,然后列出这些 bean 并将其传递给 JSP,然后打印这些详细信息。但是,如果我不允许使用 JSP,我将如何实现它。如果我使用 servlet 检索这些数据并将其设置为一个 bean,然后将其设置为一个列表并通过请求调度程序传递它,我将如何从 HTML 页面中的列表中获取每个 bean?

我无法让这个 JSTL 工作。我正在使用 Netbeans 7.0 和 Apache Tomcat 7。

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>DVD Guru</title>
        <link rel="stylesheet" type="text/css" href="style.css" media="screen" />
    </head>
    <body>   
     <div id="wrapper">     
        <c:set var="testing" value="blah"/>
                <c:out value="${testing}"/>
        </div>      
    </body>
</html>

我收到以下错误

根据 TLD 或标记文件中的属性指令,属性项不接受任何表达式

我已经从项目属性中导入了 JSTL 1.1 库。 还应该做些什么吗?

【问题讨论】:

  • 你的意思是纯 HTML 而不是 JSP?
  • 是的,使用 html 页面...但仅使用纯 html 是不可能的,我必须使用 jstl,因为我需要遍历列表,然后获取单个 bean...
  • 你需要使用JSP,HTML不是像(JSP)那样的服务器端组件。
  • 好吧,我必须使用 .jsp 让服务器知道它必须先编译它。谢谢建议。
  • 你得到的错误是由&lt;c:forEach items&gt;引起的,但这在目前提供的代码中是不可见的。请提供真实代码,不要过度概括代码。

标签: java jstl


【解决方案1】:

您必须使用JSPJSTL - 只是一组自定义标签,不能单独使用。以及表达语言。如果你没有使用任何 MVC 框架,那么你需要自己做一些他们的工作。请查看(如果您还没有)以下设计模式:

  1. Front Controller, Command 用于简单应用
  2. Front Controller, View Helper 用于更复杂的应用

UPD

要解决 EL 问题,请尝试将您的 JSP 中的 JSTL uri 更正为:

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

【讨论】:

    【解决方案2】:
    <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>
    

    您的 JSTL taglib URI 错误。您所拥有的是旧版 JSTL 1.0。从 JSTL 1.1 开始,taglib URI 中多了一个 /jsp 路径,因为表达式语言(那些 ${} 的东西)已从 JSTL 移至 JSP,因此 JSTL 1.0 和 1.1 的 taglib 不可互换。

    相应地修复它:

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

    假设 Netbeans 足够聪明,可以为 Tomcat 7 自动生成与 Servlet 3.0 兼容的web.xml,则无需再做任何事情。

    另见:

    【讨论】:

    • 谢谢,也解决了我遇到的一个问题。遗憾的是 IDE 没有办法告诉你。 :)
    【解决方案3】:

    将您的 JSTL taglib uri 更改为以下内容:

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

    它就像一个魅力。

    【讨论】:

    • 我遇到了同样的问题,通过更改 uri 我得到了解决方案。谢谢..
    • 在 jstl-1.2.jar 中,您可以使用以下标签。您正在使用的是旧版 JSTL 1.0。使用这个: java.sun.com/jsp/jstl/core" prefix="c" %> 而不是 java.sun.com/jstl/core" prefix="c" %>
    【解决方案4】:

    您甚至可以通过连接字符串来生成 HTML。或者您可以使用任何文本模板引擎,如简单的 JMTE(Java 最小模板引擎)或更高级的如 Velocity 或 StringTemplate。使用另一个模板引擎,您可以勇敢地声明您不使用 JSP。虽然我看不出 JSP 和其他模板引擎有什么区别,但我的意思是你的要求有点愚蠢。

    更好的是:不要使用 JSP 使用 JSF 2! )

    【讨论】:

      【解决方案5】:

      尝试使用前缀&lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %&gt; 而不是 &lt;%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %&gt;

      【讨论】:

        【解决方案6】:

        我在尝试在 jstl XML 中使用变量时遇到了这个问题,我想在 &lt;x:out select/&gt; 中使用 randInt

        &lt;x:out select="$parsedXML/content/${randInt}/title"/&gt;

        使用pageContext解决了这个问题

        <%
            Random rand = new Random();
            int randInt = rand.nextInt();
            pageContext.setAttribute("randInt", randInt);
        %>
        <x:out select="$parsedXML/content/article[$pageScope:randInt]/title"/>
        

        【讨论】:

          猜你喜欢
          • 2013-08-24
          • 1970-01-01
          • 1970-01-01
          • 2014-03-22
          • 1970-01-01
          • 2014-03-17
          • 2014-08-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多