问题1:自定义foreach标签,遍历List集合和map?
jsp文件内容:
1)引入tld文件
<%@taglib uri=”www.ctags.c” prefix=”ctag” %>
2)将数据添加到域当中。
//集合
List list = new ArrayList();
list.add(new student(“jia”,24,”id333”));
list.add(new student(“cui”,24,”id444”));
list.add(new student(“kun”,24,”id555”));
//将集合保存到request域当中
pageContext.setAttribute(“list”, list,pageContext.REQUEST_SCOPE);
//map
Map<String,student> map = new HashMap<String,student>();
map.put("101",new student("cui",10,"id999"));
map.put("102",new student("jia",23,"id888"));
map.put("103",new student("wang",24,"id777"));
//将map保存到page域当中
pageContext.setAttribute("map",map);
%>
<ctag:foreach items="${list}" var="student">
姓名:${student.name} --- 年龄:${student.age}<br/>
</ctag:foreach>
<hr/>
<ctag:foreach items="${map}" var="entr">
${entr}<br/>
姓名:${entr.value.name} -- 年龄:${entr.value.age}<br/>
</ctag:foreach>
处理器类Java文件:
1)如何接收jsp属性的参数?
设置和jsp属性相同名称的成员变量和setXX方法。
2)如何给接收的jsp属性设置值?
使用域,page域就是当前的jsp和翻译的Java文件。
PageContext page = (PageContext)this.getJspContext();
page.setAttribute(var, obj);
// setAttribute(String,value),所以会将var变量的值作为字符串,将变量设置到域中。
public class foreach extends SimpleTagSupport{
//接收jsp标签属性值。
private Object items = null;
private String var = “”;
public void setItems(Object items) {
this.items = items; //items是eL标签取出的域变量。
}
public void setVar(String var) {
this.var = var;
}
@Override
public void doTag() throws JspException, IOException {
//遍历list
if(items instanceof List){
List list = (List)items;
for(Object obj:list){
//把每个对象,放到pagecontext当中。
PageContext page = (PageContext)this.getJspContext();
page.setAttribute(var, obj); // setAttribute(String,value),所以会将var变量的值作为字符串,将变量设置到域中。
//System.out.println("this is ->>>>"+page.getAttribute(var));
//显示标签体内容。
this.getJspBody().invoke(null);
}
}
//遍历map
if(items instanceof Map){
Map map = (Map)items;
Set<Entry> entrySet = map.entrySet();
for(Entry ent:entrySet){
//把每个对象,放到pagecontext当中。
PageContext page = (PageContext)this.getJspContext();
page.setAttribute(var, ent);
//显示标签体内容。
this.getJspBody().invoke(null);
}
}
}
}
3)tld文件内容
foreach
defineLables.foreach
scriptless
<attribute>
<!-- 属性名 -->
<name>items</name>
<!-- 属性必须得有值 -->
<required>true</required>
<!-- 属性值可以是el表达式-->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>