一、书
《JSP设计》有一半内容在讲JSTL,很不错的参考书
二、版本
要注意1.0.x和1.1.x两个版本,目前最新版分别为1.0.6和1.1.2
1.1版比1.0版多了fn标签库(常用的字符串操作在里面,特别是length、substring、等用于显示的函数)
各个版本都可以在apache网站下载得到
三、使用中注意的问题
在仅支持JSP1.2规范的容器中,只能使用jstl 1.0版,所以fn就不能用了,很不爽。${1 + 2}必面都要写在<c:out value='${1 + 2}' />里。在支持JSP2.0规范的容器中,可以直接使用el表达式。
四、一些BUG
在websphere 6.0(6.0.2.13版以前)中,有fn:length函数的BUG。只有打补丁了。
在websphere 中,如<c:out value='${var == 0 ? "非" : "是" }' />这样的句子会出问题,tomcat下刚运行很好。应该是:jstl只是一个规范,各个web容器对其实现不同的原因吧。
五、不错的地方
易学易用,再也没有空值特别是null的困扰,页面不容易抛出error 500错误,感觉有点象在写ASP
最常用的只有c、fn、fmt三个库
五、一些不爽的地方
不支持自定义函数,很郁闷,我想可能是JSTL实现作用域的问题吧。
只有<c:if test='${}' /></c:if>没有elseif的语法,两个以上有判断只有用
<c:choose>
<c:when test="{...}">1</c:when>
<c:when test="{...}">2</c:when>
<c:otherwise>3</c:otherwise>
</c:choose>
forEach中如果再有个奇偶判断就好了。
上面几点,webwok中的OGNL就做得非常好。
<forEach begin="begin" end="end" step="step">中end的值必须大于等于begin,step也就不能继负值了。
六、常用代码:
<c:out value="${tpaMain.tpaInfo.content}" escapeXml="false" />
<fmt:formatDate value="${tpaMain.add_date}" pattern="yyyy-MM-dd hh:mm" />
格式化日期、货币单位、数字是用得最多的
<c:forEach var="companyIndustry" items="${current.companyIndustryList}">
<c:out value='${companyIndustry.craft_name} ' escapeXml='false' />
</c:forEach>
forToken有时也很有用
输出复杂的多行多列的表格,可更改columnCount的值
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<c:set var="recordCount" value="0" />
<c:set var="columnCount" value="2" />
<c:out value='<tr>' escapeXml='false' />
<c:forEach var="category" items="${categoryList}">
<c:if test="${(recordCount mod columnCount) eq 0 && recordCount ne 0}">
<c:out value='</tr><tr>' escapeXml='false' />
</c:if>
<c:out value='<td' escapeXml='false' />
<c:out value='<span style="font-size: 14px;color: #db3210;font-weight: bold;">${category.craft_name}</span><br />' escapeXml='false' />
<c:forEach var="current" items="${category.categoryList}">
<a href="<c:url value='${param.url}?craft_index=${current.craft_index}' />"><c:out value="${current.craft_name}" escapeXml='false' /></a>
</c:forEach>
<c:out value='</td>' escapeXml='false' />
<c:set var="recordCount" value="${recordCount + 1}" />
</c:forEach>
<c:set var="column" value="${recordCount mod columnCount}" />
<c:if test="${column ne 0}">
<c:forEach begin="${column}" end="${columnCount - 1}">
<c:out value='<td> </td>' escapeXml='false' />
</c:forEach>
</c:if>
<c:if test="${recordCount eq 0}">
<c:forEach begin="0" end="${columnCount - 1}">
<c:out value='<td> </td>' escapeXml='false' />
</c:forEach>
</c:if>
<c:out value='</tr>' escapeXml='false' />
</table>
《JSP设计》有一半内容在讲JSTL,很不错的参考书
二、版本
要注意1.0.x和1.1.x两个版本,目前最新版分别为1.0.6和1.1.2
1.1版比1.0版多了fn标签库(常用的字符串操作在里面,特别是length、substring、等用于显示的函数)
各个版本都可以在apache网站下载得到
三、使用中注意的问题
在仅支持JSP1.2规范的容器中,只能使用jstl 1.0版,所以fn就不能用了,很不爽。${1 + 2}必面都要写在<c:out value='${1 + 2}' />里。在支持JSP2.0规范的容器中,可以直接使用el表达式。
四、一些BUG
在websphere 6.0(6.0.2.13版以前)中,有fn:length函数的BUG。只有打补丁了。
在websphere 中,如<c:out value='${var == 0 ? "非" : "是" }' />这样的句子会出问题,tomcat下刚运行很好。应该是:jstl只是一个规范,各个web容器对其实现不同的原因吧。
五、不错的地方
易学易用,再也没有空值特别是null的困扰,页面不容易抛出error 500错误,感觉有点象在写ASP
最常用的只有c、fn、fmt三个库
五、一些不爽的地方
不支持自定义函数,很郁闷,我想可能是JSTL实现作用域的问题吧。
只有<c:if test='${}' /></c:if>没有elseif的语法,两个以上有判断只有用
<c:choose>
<c:when test="{...}">1</c:when>
<c:when test="{...}">2</c:when>
<c:otherwise>3</c:otherwise>
</c:choose>
forEach中如果再有个奇偶判断就好了。
上面几点,webwok中的OGNL就做得非常好。
<forEach begin="begin" end="end" step="step">中end的值必须大于等于begin,step也就不能继负值了。
六、常用代码:
<c:out value="${tpaMain.tpaInfo.content}" escapeXml="false" />
<fmt:formatDate value="${tpaMain.add_date}" pattern="yyyy-MM-dd hh:mm" />
格式化日期、货币单位、数字是用得最多的
<c:forEach var="companyIndustry" items="${current.companyIndustryList}">
<c:out value='${companyIndustry.craft_name} ' escapeXml='false' />
</c:forEach>
forToken有时也很有用
输出复杂的多行多列的表格,可更改columnCount的值
<table width="98%" border="0" align="center" cellpadding="0" cellspacing="0">
<c:set var="recordCount" value="0" />
<c:set var="columnCount" value="2" />
<c:out value='<tr>' escapeXml='false' />
<c:forEach var="category" items="${categoryList}">
<c:if test="${(recordCount mod columnCount) eq 0 && recordCount ne 0}">
<c:out value='</tr><tr>' escapeXml='false' />
</c:if>
<c:out value='<td' escapeXml='false' />
<c:out value='<span style="font-size: 14px;color: #db3210;font-weight: bold;">${category.craft_name}</span><br />' escapeXml='false' />
<c:forEach var="current" items="${category.categoryList}">
<a href="<c:url value='${param.url}?craft_index=${current.craft_index}' />"><c:out value="${current.craft_name}" escapeXml='false' /></a>
</c:forEach>
<c:out value='</td>' escapeXml='false' />
<c:set var="recordCount" value="${recordCount + 1}" />
</c:forEach>
<c:set var="column" value="${recordCount mod columnCount}" />
<c:if test="${column ne 0}">
<c:forEach begin="${column}" end="${columnCount - 1}">
<c:out value='<td> </td>' escapeXml='false' />
</c:forEach>
</c:if>
<c:if test="${recordCount eq 0}">
<c:forEach begin="0" end="${columnCount - 1}">
<c:out value='<td> </td>' escapeXml='false' />
</c:forEach>
</c:if>
<c:out value='</tr>' escapeXml='false' />
</table>