我有一个项目,我需要在HTML页面中显示电影的详细信息。我必须严格遵循MVC,虽然我没有使用任何框架,如Spring或Struts。我也不允许使用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库。 还应该做些什么吗?
答案 0 :(得分:54)
您必须使用 JSP , JSTL - 只是自定义标记集,不能单独使用。以及表达语言。如果您没有使用任何MVC框架,那么您需要自己完成一些工作。请看下面的设计模式(如果你还没有):
Front Controller
,Command
用于简单应用Front Controller
,View Helper
用于更复杂的应用<强> UPD 强>:
要解决EL问题,请尝试将JSP中的JSTL uri更正为:
<%@ taglib uri='http://java.sun.com/jsp/jstl/core' prefix='c'%>
答案 1 :(得分:22)
<%@ 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的taglibs不可互换。
相应修复:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
假设Netbeans足够聪明,可以自动生成与Tomcat 7兼容的Servlet 3.0 web.xml
,那么就不需要做任何事了。
答案 2 :(得分:8)
将您的JSTL taglib uri更改为以下内容:
<%@taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
它就像一个魅力。
答案 3 :(得分:2)
您甚至可以通过连接字符串来生成HTML。或者您可以使用任何文本模板引擎,如简单的JMTE(Java最小模板引擎)或更高级的Velocity或StringTemplate。使用另一个模板引擎,您可以勇敢地声明您不使用JSP。虽然我没有看到JSP和其他模板引擎之间有太大区别,但我的意思是你的要求有点愚蠢。
更好:不要使用JSP使用JSF 2! )
答案 4 :(得分:2)
尝试使用前缀<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt" %>
代替
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
答案 5 :(得分:0)
我在尝试在jstl XML中使用变量时遇到了这个问题,我想在randInt
中使用<x:out select/>
:
<x:out select="$parsedXML/content/${randInt}/title"/>
使用pageContext
<%
Random rand = new Random();
int randInt = rand.nextInt();
pageContext.setAttribute("randInt", randInt);
%>
<x:out select="$parsedXML/content/article[$pageScope:randInt]/title"/>