添加俩个属性: //声明属性的成员变量 private Integer value; private String name; 并为两个成员属性写setter方法; public void setValue(Integer value) public void setName(String name)
在标签库文件tld注明此标签和属性:
<!-- 标签名 --> <name>AttributeTags</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.AttributeTags</tag-class> <!-- 输出标签体的内容格式标签体不可以写jsp的java代码 --> <body-content>scriptless</body-content> <!-- 配置属性name --> <attribute> <name>name</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> <!-- 配置属性value --> <attribute> <name>value</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag>
现在就可以用带属性的标签了
在tld配置属性时你可以配置下面的属性:
6.带有子标签的自定义标签:
就像核心标签库的choose标签一样我们也可以定义嵌套的自定义标签,这部分我们主要讲解自己创建一个类似核心标签库的choose标签。步骤如下:
建立处理类,处理类还是与前面一样的方法。需要介绍的是用到了一个getParent()方法,从名字上就可以知道是为了获得父标签,对就是获得父标签类;
建立三个处理类文件: ChooseTag,OtherWiseTag,whenTag
//ChooseTag类: public class ChooseTag extends SimpleTagSupport{ //此去时变量不是标签属性,由when标签更改;othewise获得; private boolean flag; public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void doTag() throws JspException, IOException { // Choose标签作用显示标签体,以及作为其他两个标签的父标签; getJspBody().invoke(null); } } //whenTag类 public class whenTag extends SimpleTagSupport{ //增加test属性 private boolean test; public boolean isTest() { return test; } public void setTest(boolean test) { this.test = test; } @Override public void doTag() throws JspException, IOException { //如果标签属性为true,显示标签体 if(test){ getJspBody().invoke(null); } //设置父标签给otherwise用 ChooseTag parent=null; if(getParent() instanceof ChooseTag){ parent=(ChooseTag)getParent(); parent.setFlag(test); } } } //OtherWiseTag类: public class OtherWiseTag extends SimpleTagSupport { @Override public void doTag() throws JspException, IOException { boolean test=true; //获取父标签的test,由他的上一个when设置 if(getParent() instanceof ChooseTag) { //获取父标签的test,由他的上一个when设置 ChooseTag parent=(ChooseTag)getParent(); test=parent.isFlag(); } if(!test){ getJspBody().invoke(null); } } }
编写tld文件:与其他的标签定义一模一样
<!-- 定义标签,choose--> <tag> <!-- 标签名 --> <name>choose</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.ChooseTag</tag-class> <!-- 输出标签体的内容格式标签体不可以写jsp的java代码 --> <body-content>scriptless</body-content> </tag> <!-- 定义标签,when--> <tag> <!-- 标签名 when --> <name>When</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.whenTag</tag-class> <!-- 输出标签体的内容格式标签体不可以写jsp的java代码 --> <body-content>scriptless</body-content> <!-- 配置属性name --> <attribute> <name>test</name> <!-- 是否必填 --> <required>true</required> <!-- 是否支持EL表达式 --> <rtexprvalue>true</rtexprvalue> </attribute> </tag> <!-- 定义标签,Otherwise--> <tag> <!-- 标签名 --> <name>otherwise</name> <!-- 标签处理类 --> <tag-class>com.rlovep.tags.OtherWiseTag</tag-class> <!-- 输出标签体的内容格式标签体不可以写jsp的java代码 --> <body-content>scriptless</body-content> </tag>
使用带子标签的标签:与使用其他标签稍微有些不同,需要嵌套