2008年10月2日 星期四

JSTL

 對presentation logic也可以reuse

Tag handler分為兩種: classic tag interface & Simple tag interface

使用tag library需要URI
URI有三種:
absolute http://xx.xx:8080/xx
root relative /xx/xx
Non-root relative xx/xx

如果是用JSP syntax:
<%@ taglib prefix="test" url="sampleLib.tld"%>

如果是用XML syntax:
<jsp:root
xmlns:jsp="http://..........."
xmlns:test="sampleLib.tld"
version="2.0">
JSP PAGE.....
< /jsp:root>

由於要避免一旦改了tld檔,每個jsp的路徑都得改
所以可以在web.xml設定

如果tld檔被放在JAR檔裡面的話,要取名為taglib.tld

taglib map
分為explicit mapping,implicit mapping,well-know mapping
explicit lib:
在web.xml裡面宣告
<taglib>
<taglib-uri>
http://xx.xx/studykit
</taglib-uri>
<taglib-location>
/myLibs/studyKit.tld 或 yourLibs/sample.jar
</taglib-location>

</taglib>
< >

mapping 次序

如果有找到對應的mapping
root relative就從application找起
non-root relative就從application/WEB-INF找起
如果在web.xml中沒找到對應的mapping
absolute就產生error
root relative就從application找起
non-root relative就從jsp檔案的地方找起

tag分為四種
Empty tag
tag with attributes
tag with JSP code (body)
tag with nested tag (switch & case)


JSP Standard Tag Library(JSTL)
下面有core,xml,fmt,sql,functions等library
這邊只介紹core
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%>

catch:
一般exception是送到error page,如果tag之間的code發生exception,會傳到var裡定義的variable
out:
有點像expression
set:
EL不能從各種scope中set跟remove attribute
所以可以用這個action來代替
可以使用
<c:set var="num" value="${4x4}"/>

<c:set var="num">
${4x4}
</c:set>
而用在Map或JavaBean的時候
<c:set target="customer1" property="zipcode">
44124
</c:set>

<c:set target="customer1" property="zipcode" value="44124"/>
remove:
<c:remove var="num" scope="session"/>
如果沒設scope,預設page->request->session->application
if:
用test來設定true和false,沒有 else
choose:
裡面包when跟otherwise,跟switch-case一樣
forEach:
兩種用法
第一種
用begin end step來做for迴圈
第二種
類似for (int element : collection)
只是變成
<c:forEach var="element" items="${collection}">
<c:set var="element" value="100"/>
</c:forEach>
forToken:
類似forEach,不過是用在String上,用delims隔開
參數有var,items,delims

url,import,redirect:
可以夾param在tag之間(c:param name=xx value=xx)

tld檔

taglib
tlib
jsp-version
short-name
uri 可以implicit設定uri,在JAR檔的狀況會自動產生mapping
tag 可以多個,也可以不同tag用同個class
name
tag-class
body-content
description
attribute
name
required 是否mandatory
rtexprvalue 是否可以用requestion time expression

body-content有三種
empty 中間不可以有東西,不過可以<></>
JSP 可以有text,html,script,action,或別的custom tag
tagdependent 用別的語言

沒有留言: