【自定义标签开发】08-标签案例-开发if..else标签
来源:互联网 发布:成都卧龙大数据 苏明亮 编辑:程序博客网 时间:2024/04/27 22:14
上一次我们开发了if标签,但是我们在框架中大部分使用的是if...else标签,我们接下来就模拟sun的C标签的if...else标签:
我们最终的效果是:
我们可以看到,when不执行的话,就要执行otherwise,这就意味着,when和otherwise都要知晓我们的test中的值的真假,所以when和otherwise就要共享一个test的变量。为了实现共享同一个变量的功能,我们的做法是,让if和otherwise的两个标签处理类都实现一个带有test变量的“父亲”---choose标签。
也就是,我们一共要开发3个标签(when/otherwise/choose)。
首先我们开发choose标签
创建一个标签处理器类:
编写其中的逻辑:
然后创建when标签处理器类:
编写其中逻辑:
最后创建otherwise标签处理器类:
编写其中逻辑:
最后我们在z.tld配置文件中注册这三个标签:
我们重启Web应用,访问相应页面:
这里我们可以看到,当我们用户不存在的时候,显示的是otherwise中的值。我们将user注册到session中:
重新访问,就显示了登录状态:
<c:choose> <c:when test="..."> ...... </c:when><c:otherwise> ...... </c:otherwise></c:choose>开发一个我们自己的if...else标签,以此来了解sun自定义标签的内涵。
我们最终的效果是:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@taglib uri="/example" prefix="z" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Hello</title> </head> <body> <z:choose> <z:when test="${user!=null}"> 欢迎您!(*^__^*) </z:when><z:otherwise> 您没有登录!~~(>_<)~~ </z:otherwise> </z:choose> </body> </html>
我们可以看到,when不执行的话,就要执行otherwise,这就意味着,when和otherwise都要知晓我们的test中的值的真假,所以when和otherwise就要共享一个test的变量。为了实现共享同一个变量的功能,我们的做法是,让if和otherwise的两个标签处理类都实现一个带有test变量的“父亲”---choose标签。
也就是,我们一共要开发3个标签(when/otherwise/choose)。
首先我们开发choose标签
创建一个标签处理器类:
编写其中的逻辑:
package org.zyg.web.exampleTag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class ChooseTag extends SimpleTagSupport {private boolean isDo;public boolean isDo() { //get方法return isDo;}public void setDo(boolean isDo) { //set方法this.isDo = isDo;}//控制标签体执行@Overridepublic void doTag() throws JspException, IOException {this.getJspBody().invoke(null);}}
然后创建when标签处理器类:
编写其中逻辑:
package org.zyg.web.exampleTag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class WhenTag extends SimpleTagSupport {private boolean test;public void setTest(boolean test) {this.test = test;}@Overridepublic void doTag() throws JspException, IOException {//得到父标签ChooseTag parent=(ChooseTag) this.getParent();if(test && !parent.isDo()){//当test的值为真this.getJspBody().invoke(null);//因为父类的isDo变量默认值是false,修改isDo是为了给otherwise作参考parent.setDo(true);}}}
最后创建otherwise标签处理器类:
编写其中逻辑:
package org.zyg.web.exampleTag;import java.io.IOException;import javax.servlet.jsp.JspException;import javax.servlet.jsp.tagext.SimpleTagSupport;public class OtherWiseTag extends SimpleTagSupport {@Overridepublic void doTag() throws JspException, IOException {ChooseTag parent=(ChooseTag)this.getParent();if(!parent.isDo()){//当when中的test为假的时候this.getJspBody().invoke(null);parent.setDo(true);}}}
最后我们在z.tld配置文件中注册这三个标签:
<tag> <name>choose</name><!-- 标签名 --> <tag-class>org.zyg.web.exampleTag.ChooseTag</tag-class> <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) --></tag><tag> <name>when</name><!-- 标签名 --> <tag-class>org.zyg.web.exampleTag.WhenTag</tag-class> <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) --><attribute><name>test</name><required>true</required><rtexprvalue>true</rtexprvalue></attribute></tag><tag> <name>otherwise</name><!-- 标签名 --> <tag-class>org.zyg.web.exampleTag.OtherWiseTag</tag-class> <body-content>scriptless</body-content><!-- 有无标签体(单标签还是成对标签) --></tag>
我们重启Web应用,访问相应页面:
这里我们可以看到,当我们用户不存在的时候,显示的是otherwise中的值。我们将user注册到session中:
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><%@taglib uri="/example" prefix="z" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>Hello</title> </head> <body> <% session.setAttribute("user","zyg"); %> <z:choose> <z:when test="${user!=null}"> 欢迎您!(*^__^*) </z:when><z:otherwise> 您没有登录!~~(>_<)~~ </z:otherwise> </z:choose> </body> </html>
重新访问,就显示了登录状态:
以上就是类似if...else标签的开发。
转载请注明出处:http://blog.csdn.net/acmman/article/details/51187408
0 0
- 【自定义标签开发】08-标签案例-开发if..else标签
- 开发if,else标签
- 【自定义标签开发】07-标签案例-开发if标签
- JSP:自定义标签之开发<c:if><c:else>标签
- 标签案例if else 标签:
- 【自定义标签的案例】防盗链、if标签、if-else标签、【foreach标签】、转义标签
- JSP标签案例----开发If-else和单独的if标签
- 开发<c:if>标签开发<c:if><c:else>标签开发迭代标签源代码
- 【自定义标签开发】06-标签案例-开发防盗链标签
- 【自定义标签开发】09-标签案例-开发foreach标签
- 【自定义标签开发】10-标签案例-开发转义标签
- 开发<c:if>标签
- 开发<c:if><c:else>标签解析及其源代码
- c标签 if else
- Struts2 if/else标签
- javaweb之自定义标签库——if else标签
- 标签案例-开发防盗链标签
- JSP标签案例-开发防盗链标签
- TransformException: com.android.ide.common.process.ProcessException:错误解决
- 图解DHCP的4步租约过程
- Kinect for Unity V2 代码示例(三) 手势控制
- 穷游Q-Home:看脸,是文艺范的“一日游”地接社
- 《聊聊Socket、TCP/IP、HTTP、FTP及网络编程》 / 《聊聊同步、异步、阻塞与非阻塞》
- 【自定义标签开发】08-标签案例-开发if..else标签
- log4j2 配置 基于JAVA 以Web为例
- iOS学习笔记36-Masonry自动布局
- 容斥原理
- C++调用Matlab Compiler Runtime库函数的最简方法
- bzoj4542 大数
- 网页版即时通讯
- Effective STL 条款14
- MAPGIS平台下的任意矩形图框生成方法