jstl学习经验(旧)

| Comments

为了在公司里边推广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]}”/>

Comments