key words: jsp,jstl,1.0,1.1,fn函數
原來一直用struts,最近項目里有人用jstl,我也就順便拿來用,感覺還是不錯。
過程中碰到一些小的問題總結如下:
一。版本問題
jstl存在1.0和1.1的差異問題,用EL建議需要在1.1的版本下,1.1的URI的標志為:
注意,1.0版本沒有/jsp/.
如果用的1.0會出現如下異常
二。打開EL
前提是容器支持2.0,即使支持默認也未必打開,最安全的方式就是顯示打開 isELIgnored="false"
三.fn的用法
對于Vo里的一個List作length的計算或判斷很方便
四.tld的聲明可以在web.xml作顯式聲明也可以用http作直接URL聲明
推薦用本地的方式.
原來一直用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"%>
<%@?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?
????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>
?????????????????????????<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聲明
推薦用本地的方式.