随着各种框架的产生,各种标签语言也越来越多,不过其中官方支持的只有一个那就是JSTL.
看了一下各个框架的例程,几乎所有的框架都对JSTL有支持.
所以下定决心,不怕牺牲了解一下JSTL,并尝试在项目中慢慢过渡..
写了一个Very Simple的例子:
********************************************************************************************
<%@ page contentType="text/html; charset=gbk" import="
java.io.*,
java.sql.*,
java.util.*,
javax.servlet.jsp.jstl.sql.*"
%>
<%@ taglib uri="/core" prefix="c" %>
<%@ taglib uri="/format" prefix="fmt" %>
<%@ include file="../include/common.jsp" %>
<%
String testid="测试";
//读取数据到JSTL的Result
Result data=openResult("select * from test");
if (data.getRowCount()>0){
System.err.println(data.getColumnNames()[1]);
System.err.println(data.getRows()[1].get("id"));
}
//一般分页操作,需要知道总行数
request.setAttribute("data",data);
request.setAttribute("testid",testid);
%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<head>
</head>
<body >
<c:out value="${testid}"/><br>
<c:forEach var="row" items="${data.rows}" varStatus="status">
字典名称:<c:out value="${data.rows[status.index].id}" /><br>
字典数据:<c:out value="${row.code}" /><br>
</c:forEach>
<%
out.println("ok");
//最终关闭连接
try {
if ( stat != null ) { stat.close(); }
if ( conn != null ) { conn.close(); }
}
catch ( Exception e ) {
}
data=null;
jrs=null;
System.gc();
%>
</body>
</html>
********************************************************************************************
结果,我想移值这个代码到Appfuse的框架中时问题出现了...怎么样处理,变量都不能显示...
结果花了四五个小时,才发现是 Jstl版本 和 描述的 fmt.tld c.tld的版本不匹配,而且,这些例子均依赖于Appache 的Taglib
修改了一下,采用默认得的uri(注意,低版本的URI和高版本的URI语法上还有差异T^@#^@^#@^)
<%@ page contentType="text/html; charset=gbk" import="
java.io.*,
java.sql.*,
java.util.*,
javax.servlet.jsp.jstl.sql.*"
%>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<%@ include file="../include/common.jsp" %>
<%
String testid="测试";
//读取数据到JSTL的Result
Result data=openResult("select * from test");
if (data.getRowCount()>0){
System.err.println(data.getColumnNames()[1]);
System.err.println(data.getRows()[1].get("id"));
}
//一般分页操作,需要知道总行数
request.setAttribute("data",data);
request.setAttribute("testid",testid);
%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<head>
</head>
<body >
<c:out value="${testid}"/><br>
<c:forEach var="row" items="${data.rows}" varStatus="status">
字典名称:<c:out value="${data.rows[status.index].id}" /><br>
字典数据:<c:out value="${row.code}" /><br>
</c:forEach>
<%
out.println("ok");
//最终关闭连接
try {
if ( stat != null ) { stat.close(); }
if ( conn != null ) { conn.close(); }
}
catch ( Exception e ) {
}
data=null;
jrs=null;
System.gc();
%>
</body>
</html>
*********************************************************************************************
在这个过程,我仔细看了一下配置文件,JSTL其实只实现很少的几个标签,而我们常用的大部分功能,很多都是依赖于Apache TagLib的实现
而随着版本的变化,这些细微的配置会造成一些差异,可恨的是,竟然没有明确的错误提示....
结果浪费了我数个小时,最后是到Apache下载了一个最新的Jstl.jar和stander.jar 及描述文件.