调试JSTL碰到的问题,真的是,无语.....

随着各种框架的产生,各种标签语言也越来越多,不过其中官方支持的只有一个那就是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 及描述文件.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值