- EL表达式取pageContext、parameters、request、session、application 等处的属性值(假如有 name 属性)分别是:
${pageScope.name}、${param.name}、{$requestScope.name}、{$sessionScope.name}、{$applicationScope.name}
- jsp:useBean: 引用javaBean对象到jsp页面,让页面能用EL表达式或jsp:getProperty引用此Bean用法如下
<jsp:useBean id="now" class="java.util.Date" scope="page"/>
此标签表示在page范围内查找id为now的javaBean对象,找到就直接使用,没有就创建对象并置于指定的范围内
其中id属性表示bean在页面中的标识,class为bean的类名。上面定义以后可在页面上这样使用
${now}, <jsp:getProperty property="time" name="now"/>
其他不常用:
<jsp:useBean
id="beanInstanceName"
scope="page | request | session | application"
{
class="package.class" |
type="package.class" |
class="package.class" type="package.class" |
beanName="{package.class | <%= expression %>}" type="package.class"
}
/>other elements</jsp:useBean>
用于创建一个JavaBeans组件,首先会试图定位一个Bean实例,如果不存在,那么就会从创建一个新的.
属性:
-id="创建的Bean变量名称"
在你所定义的范围中确认Bean的变量,你能在后面的程序中使用此变量名来分辨不同的Bean 这个变量名对大小写敏感,如果这个Bean已经在别的<jsp:useBean>中创建,那么这个id的值必须与原来的那个id值一致.
-scope="page | request | session | application"Bean存在的范围以及id变量名的有效范围.缺省值是page.
- jsp:getProperty:显示jsp:useBean标签定义的javaBean属性,如上例所示。此标签相对EL显得很臃肿,能用EL就用EL替换吧
- forEach循环标签,示例说明
a)打印1,2,3,4,5
<c:forEach begin="1" end="5" var="i" varStatus="forFlag">
<c:if test="${!forFlag.first}">,</c:if>
${i}
</c:forEach>
b)打印1,2,3,4,5当要红黑相间打印
<c:forEach begin="1" end="5" var="i" varStatus="forFlag">
<c:if test="${!forFlag.first}">,</c:if>
<c:set var="acolor" value="black"/>
<c:if test="${forFlag.index%2==0}">
<c:set var="acolor" value="red"/>
</c:if>
<font color="${acolor}">${i}</font>
</c:forEach>
注意:varStatus属性又有两个子属性count, index两个属性都在循环是递增,当count从1开始,index从0开始
varStatus其他属性:first表示是否是第一次,last是否最后一次,begin/end/step属性
c)打印student列表,items属性用el表达式,给定待迭代的集合,var指定每次在集合里取出的元素
<c:forEach items="${students}" var="stu">
${stu.code}-${stu.name}
</c:forEach>
- 格式化相关uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"
a)日期输出类似 2010-10-10 09:10:10格式
<jsp:useBean id="now" class="java.util.Date"></jsp:useBean>
<fmt:formatDate value="${now}" pattern="yyyy-MM-dd hh:mm:ss"/>
b)数字格式化输出 12.5
<c:set var="amount" value="12.47"/>
<fmt:formatNumber pattern="##.#" value="${amount}"></fmt:formatNumber>
c)把字符串解析成数字,并存储到scope(application,page,session,request)中,如果不指定scope默认在page
<fmt:parseNumber value="10.123456" type="number" var="credit2" scope="page"></fmt:parseNumber>
d)把字符串解析成日期
<fmt:parseDate value="2010-11-11 15:30:30" var="myDate" pattern="yyyy-MM-dd HH:mm:ss"/>
<fmt:formatDate value="${myDate}" pattern="yyyy-MM-dd hh:mm:ss"/>
注意:HH是24小时制/天,hh是12小时制/天。上面输出 2010-11-11 03:30:30
- 函数,重点!<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>,注意函数一般都在el表达式里面使用。
a)转换大小写,trim, length
${fn:toLowerCase('aBc')} ==> abc
${fn:toUpperCase('abc')} ==> ABC
${fn:trim(' ab ')} ==>ab
${fn:length('abcd')} == >4
b)取子串
${fn:substring('012345', 1, 3)} ==>12
${fn:substring('012345', 1, -1)} ==>12345
${fn:substringAfter("0755-26668888",'-')} ==>26668888
${fn:substringBefore('0755-26776888','-')} ==>0755
${fn:substringBefore('001-22', '--') } ==>
c)开始结束、包含 startsWith, endsWith,contains, containsIgnoreCase函数必须和判断控制语句联用 <c:if> <c:choose>..
<c:if test="${fn:startsWith('abc-001', 'abc')}">TT</c:if> ==> TT
<c:if test="${fn:endsWith('abc-001','001')}">BB</c:if> ==> BB
<c:if test="${fn:contains('abc', 'b')}">contains</c:if> ==> contains
<c:if test="${fn:containsIgnoreCase('bad', 'A')}">containsIgnoreCase</c:if> ==>containsIgnoreCase
d)查位置
${fn:indexOf('abc', 'b')} ==> 1
e)${fn:escapeXml('<div>abc</div>')}