像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>
|