简单标签实现foreach代码和jar打包
一 整体思路介绍
1.使用foreach的方法在四种情况下都使用,分别为Map(映射)、Colleation(集合)、对象数组、基本类型的数组
2.用到了迭代器,因为在写标签处理器的时候,迭代器的通用性最高
二 代码和注释
1.创建标签处理器 ForEachTag.java
public class ForEachTag extends SimpleTagSupport {
private Object items;
private String var;
public void setItems(Object items) {
this.items = items;
}
public void setVar(String var) {
this.var = var;
}
public void doTag() throws JspException, IOException {
Collection collection = null;
//映射类型
if (items instanceof Map) {
Map map = (Map) items;
// 把键值对两列的转换为单列
collection = map.entrySet();
//集合类型
} else if (items instanceof Collection) {
collection = (Collection) items;
}
//用反射的机制包含对象数组和基本类型的数组
else if(items.getClass().isArray()){
collection = new ArrayList();
int length = Array.getLength(items);
for(int i =0;i<length;i++){
collection.add(Array.get(items,i));
}
}
//把集合倒换为迭代器,适用于通用的
Iterator it = collection.iterator();
while (it.hasNext()) {
Object obj = it.next();// 取出集合中的一个元素
// 存储到一个作用域范围内
this.getJspContext().setAttribute(var, obj);
this.getJspBody().invoke(null);
}
}
2.在 tld文件中部署
<tag>
<name>foreach</name>
<tag-class>com.hbsi.web.tag.project.ForEachTag</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>flase</rtexprvalue>
</attribute>
</tag>
3.在jsp文件中的使用---java代码纯粹是模拟servlet功能的
<body>
<!-- 集合类型 -->
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("assf");
request.setAttribute("list", list);
%>
<c:foreach items="${list}" var="str">
${str}<br />
</c:foreach>
<br />
--------------------------
<br />
<!-- 映射类型 -->
<%
Map map = new HashMap();
map.put("aa", "张三");
map.put("bb", "李四");
map.put("cc", "王五");
request.setAttribute("map", map);
%>
<c:foreach items="${map}" var="name">
${name}
</c:foreach>
<br />
--------------------------
<br />
<!-- 对象数组 -->
<%
Integer[] num = {1,2,3,4,5};
request.setAttribute("num",num);
%>
<c:foreach items="${num}" var="i">
${i}
</c:foreach>
<br />
--------------------------
<br />
<!--整形数组-->
<%
int[] arr={1,2,3,3,4};
request.setAttribute("arr",arr);
%>
<c:foreach items="${arr}" var="i">
${i}
</c:foreach>
</body>
注:items 是集合
var 是迭代变量,设置的是属性名.
三 打jar包
Jar包: 标签处理器以及tld文件打成一个包,打包分两种情况:
1.在命令提示符下打包:
选择路径 d:
Jar cvf mytag.jar .
Mytag是打包的包名
2.在MyElipe下打包
创建一个java工程,把创建的java类考到src下,在工程下参加一个文件夹 META-INF,把tld文件考到此文件夹下。
在工程下右击选择Export(导出),选择java下的JAR file,选择打包打包后的路径,finsh即可