-
-
梦编猿
2016-08-11
- JSP自定义标签——TagSupport之自定义标签中的迭代 III
Ps:注意setAttribute("var",...);第一个参数这里应该是var,而不是name写死。(前提:private String var;)
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
-
截图
2赞 · 0采集
-
-
梦编猿
2016-08-11
- JSP自定义标签——TagSupport之自定义标签中的迭代 II
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
-
截图
2赞 · 0采集
-
-
梦编猿
2016-08-11
- JSP自定义标签——TagSupport之自定义标签中的迭代 I
Ps:当我们再次刷新jsp页面的时候呢,这里只会取到第一个元素也就是下标为0的元素,这是由于tomcat对自定义标签运用了缓存的技术,后面我们会介绍一种更好的办法来替代它。
【温馨提示:JavaSE/EE、SSH/SSM、Hybrid APP、JQ/JS/CSS3/H5等编程爱好者关注我,加我慕课好友,互相学习,共同进步!】
-
截图
2赞 · 0采集
-
-
java家洼
2016-07-07
- 接下啦创建一个jsp页面来使用这个标签
首先引入标签库<%@ taglib prefix="imooc" uri="/imooc-tag" %>
在body中:
<imooc:iteration items="" var=""></imooc:iteration>
这里需要个数组,为了方便起见
在body中直接写java代码:
<body>
<%
String[] nbastar={"jordan","kobe","t-mac"};
/*
我们将nbastar存储在pageContext的这个范围中,
这样便于我们使用EL表达式将其取出,
*/
pageContext.setAttribute("nbastar", nbastar);
%>
<imooc:iteration items="${nbastar }" var="name">
${name }
</imooc:iteration>
</body>
启动tomcat,查看demo5.jsp
这样的话,我们的数据就循环出来了,
这里的items这个属性存放的是要循环迭代的数组或是集合
var这个属性指定了迭代变量的名称,也就是每次从集合中或是数组中呢,取出元素都会赋值给这个变量name
这样在标签体中就可以引用该变量使用集合或者数组中的元素了,那么当我们再次刷新jsp页面的时候呢
这里只会取到第一个元素也就是下标为0的元素,这是由于tomcat对自定义标签运用了缓存的技术,
后面我们会介绍一种更好的办法来替代它,
老师这节的var变量其实没用用到,在标签类中是直接写死的name属性,应该用var的值,
老师应该是故意留的一个埋点让同学们试试的吧,用心良苦啊
-
截图
1赞 · 0采集
-
-
java家洼
2016-07-07
- 第二步:
记下来在标签库中对其进行注册
<tag>
<name>iteration</name>
<tag-class>com.imooc.tag.IterationTagDemo</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>var</name>
<required>true</required>
</attribute>
<attribute>
<name>items</name>
<required>true</required>
<!--允许使用表达式作为属性值 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
-
截图
1赞 · 0采集
-
-
java家洼
2016-07-07
- 如何使自定义标签具有循环功能?jsp规范提供了IterationTag接口,从字面意思上看这是个实现标签循环的接口
我们来看一下这个接口IterationTag是继承于Tag接口(TagSupport整个类实现了IterationTag整个接口)
在Tag接口的基础上,它增加了EVAL_BODY_AGAIN的常量,和doAfterBody()方法,那这个方法和这个常量有什么用呢?
在执行完自定义标签体后,容器将会调用doAfterBody()方法,这个方法会向容器返回常量EVAL_BODY_AGAIN或者SKIP_BODY
容器会根据返回的常量来决定是否将标签体的内容再次执行,这里来举一个循环数组的案例,
第一步:新建标签的处理类,IterationTagDemo extends TagSupport
重写doStartTag()方法和doAfterBody()方法
接下来为该类添加两个标签属性
private String var;
private String[] items;
并为其提供set方法
这里还需要一个计数器,定义一个int类型的i=1;
接下来重写doStartTag()方法。
首先判断items数组是否为空,且items长度大于0,当条件成立,将数组中第一个元素,也就是下标为0的元素放到
pageContext中,并且定义其key值为name
if(items != null && items.length>0){
pageContext.setAttribute("name", items[0]);
}
此时返回一个return EVAL_BODY_INCLUDE;也就是说让其执行标签体。否则就SKIP_BODY
接下来重写一下doAfterBody()方法
首先来判断i是否小于数组的长度,如果这个条件成立,我们将剩余的元素放在键为name的pageContext中,i++,然后
return EVAL_BODY_AGAIN;就是让其再次执行标签体
-
截图
1赞 · 0采集