像HTML等標籤語言在使用時都可以設定屬性,例如:
<font size="3" color="blue">
您也可以在自訂標籤庫時,讓標籤處理類別接受屬性設定,這只要透過setter就可以了,例如寫一個簡單的驗證使用者名稱與密碼的標籤處理類別,如下:
package onlyfun.caterpillar; import java.io.*; import javax.servlet.jsp.*; import javax.servlet.jsp.tagext.*; public class ValidateTag extends TagSupport { private String username; private String password; public void setUsername(String username) { this.username = username; } public void setPassword(String password) { this.password = password; } public int doEndTag() throws JspException { if(username.equals("justin") && password.equals("toto")) { return EVAL_PAGE; } return SKIP_PAGE; } }
setUsername()與setPassword兩個setter分別用作自訂標籤中username與password兩個屬性,要在tld檔案中指定這兩個屬性使用時的條件:
... <tag> <description>Validate User</description> <name>validate</name> <tag-class>onlyfun.caterpillar.ValidateTag</tag-class> <body-content>empty</body-content> <attribute> <name>username</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>password</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> ...
在tld檔中是在<attribute>中設定屬性條件,<required>用來指定屬性是否一定要使用,若設定為true,
則一定要使用指定的屬性,設定為false表示屬性為可選的(optional),<rtexprvalue>用來表示屬性指定時,是否可以
使用表示式等動態屬性,例如 EL ${param.username}這樣的指定,如果設定為true表示可以,設定為false表示必須為靜態屬性。
同樣的,您可以選擇在web.xml中指定tld檔與uri的對應,接下來撰寫一個簡單的程式來測試:
<%@taglib prefix="caterpillar" uri="http://caterpillar.onlyfun.net/"%> <html> <body> 這個網頁要使用者名稱與密碼才看的到喔。。。。。<br><br>
<caterpillar:validate username="${param.username}" password="${param.password}"/> <H1>嗨!${param.username},請領取您的機密文件。。。。</H1> </body> </html>
為了要看到<caterpillar:validate>標籤下的網頁內容,您必須指定正確的username與password,例如:
http://localhost:8080/myjsp/test.jsp?username=justin&password=toto
這樣的話,JSP網頁會傳回以下的內容:
<html>
<body>
這個網頁要使用者名稱與密碼才看的到喔。。。。。<br><br>
<H1>嗨!justin,請領取您的機密文件。。。。</H1>
</body>
</html>
|