不得不使用jstl时注意事项
在项目开发的过程中,不得以使用jstl,原因是stuts2不支持for 循环,只支持iterator,因为本人喜欢使用struts2表达式,用jstl的过程中出现了很多细节问题比较闷,比如说我们习惯使用<s:if test=""><:/s:if>很多习惯写法,在<c:if test="">中无效,baidu了不少,还不好解决,后来终于找到了一条合适的方法,就是在 test 条件中 使用fn:函数 去做一些判断
强烈推荐不要使用jstl,用起来不爽,实在不行,请引入下面三个文件(函数库,格式化,核心库),会帮你解决不必须要的问题:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c标签库的使用不做介绍,简单写下不常用的几个
1、c:forTokens
类似于js及java中的split函数,将一个字符串用某个字符分割成数组,然后逐个处理。items是需要处理的原始字符串,delims是分隔符
<c:forTokens var="item" items="www.trs.com.cn" delims=".">
${item }<br/>
</c:forTokens>
2、fmt.tld中比较有用的fmt:parseDate, fmt:formatDate, fmt:parseNumber, fmt:formatNumber,用来格式化时间与数字,例子如下:
<fmt:formatDate value="${item.createdTime }" pattern="yyyy-MM-dd HH:mm" />
3、fn.tld,jstl的函数,其中有
fn:contains 判断一个字符串是否含有另外一个字符串,eg <c:if test="${fn:contains(str, searchString)}">;
fn:containsIgnoreCase 同上面的tag,只是不区分大小写;
fn:endsWith 判断一个字符串是否以某个字串结束,eg <c:if test="${fn:endsWith(filename, ".txt")}">
fn:escapeXml 将字符串转换为没有xml无法识别字符的字符串,eg ${fn:escapeXml(info)}
fn:indexOf 判断某个字符在一个字符串中的位置,eg ${fn:indexOf(name, "-")}
fn:join 同jsjoin,将数组用字符拼接,eg ${fn:join(array, ";")}
fn:length 计算字符串的长度
fn:replace 替换某个字串, eg ${fn:replace(text, "-", "?")}
fn:split join的反过程,eg ${fn:split(customerNames, ";")}
fn:startsWith 是否以某个字串开始, eg <c:if test="${fn:startsWith(product.id, "100-")}">
fn:substring 获取字串,eg ${fn:substring(zip, 6, -1)}
fn:substringAfter 从某个字串开始取字串,eg ${fn:substringAfter(zip, "-")}
fn:substringBefore 上一条的反过程
fn:toUpperCase 把字符串中的字符全部转为大写
fn:trim 去掉字符串两边的空格,eg ${fn.trim(name)}