为了在公司里边推广jstl,而总结的一些jstl使用技巧:
jstl可以很方便的处理NullPointException,访问越界等常见问题
<c:set var=”SPExtraInfoList” value=”${queryresult[3]}”/>
<c:out value=”${queryresult[3]}”/>
这2个表达式不会因为没有第四个元素而报错
这2个表达式一般情况下表现是一样的,只是用c:out可以带上default的参数来处理NullPointException
<td><c:out value=”${spservice.m_SpID}”/></td>
<td>${spservice.m_SpID}</td>
即使担心其他Exception,也可以通过c:catch来做防御
<c:catch><c:out value=”${values[9]/1000.00}”/></c:catch>
fn:length的使用
用来判断集合类型或String的长度,不过只是用来判断obj是否为空的话,用le语言${empty obj}更方便(同样支持多种类型)
关于fn:split
用这个方法切割会丢失空字符串,原因是这个标签使用StringTokenizer来处理而不是split方法。
<% String[] values = ((CEntityString)pageContext.getAttribute(“service”)).EntityString.split(“,”);
pageContext.setAttribute(“values”, values); %>
这是比较丑的例子,对格式依赖比较严重,所以最好就使用比较清晰的结构
关于if-else和三元表达式
jstl做判断分支是比较麻烦的,只提供了c:otherwise的方式,只好将就点先用着吧。如
<c:choose><c:when test=”${’1′ eq spextrainfo[0]}”>是</c:when><c:otherwise>否< /c:otherwise></c:choose>
jstl改变操作
jstl里边要做访问操作是比较方便的,不过涉及改变就挺麻烦的,如对某个字符串加个头,然后在Map里边检索,这样就不能在一个表达式里边写完,需要先c:set一下,如
<c:set var=”bzType” value=”BizType${spservice.m_SpBizType}”/>
<c:out value=”${BizTypeMap[bzType]}”/>