您的位置:首页 > Web前端 > JavaScript

jstl标签需要注意的问题

2011-11-05 01:18 295 查看
原来一直用struts,最近项目里有人用jstl,我也就顺便拿来用,感觉还是不错。

过程中碰到一些小的问题总结如下:

一。版本问题
jstl存在1.0和1.1的差异问题,用EL建议需要在1.1的版本下,1.1的URI的标志为:

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

注意,1.0版本没有/jsp/.

如果用的1.0会出现如下异常

org.apache.jasper.JasperException: /public/left_tree.jsp(100,24) According to TLD or attribute directive in tag file, attribute items does not accept any expressions
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:75)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:77)
com.wellsoon.zfzw.webapp.common.VabAccessFilter.doFilter(VabAccessFilter.java:43)

root cause

二。打开EL

<%@ page contentType="text/html;charset=gb2312" language="java" isELIgnored="false" %>

前提是容器支持2.0,即使支持默认也未必打开,最安全的方式就是显示打开 isELIgnored="false"

三.fn的用法
对于Vo里的一个List作length的计算或判断很方便

<table width="160" border="0" cellspacing="0" cellpadding="4">
<c:forEach items="${menuInfos}" var="m">
<c:if test="${fn:length(m.subMenus)>0}">
<tr>
<td>
<script language="JavaScript">
var tObj = new treeClass("A1")
tObj.start();
tObj.m_start("<c:out value="${m.menuModule}"/>",0);
<c:forEach items="${m.subMenus}" var="sub">
tObj.add_Sub("<c:out value="${sub.menuName}"/>","<%=path%>
<c:out value="${sub.url}"/>","mymain");
</c:forEach>
tObj.m_end();
tObj.end();
tObj.print();
</script>
</td>
</tr>
</c:if>
</c:forEach>

</table>

四.tld的声明可以在web.xml作显式声明也可以用http作直接URL声明
推荐用本地的方式.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: