自定义foreach标签,遍历List集合和map?

问题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 map = new HashMap();
    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);
 %>
 
    姓名:${student.name}  --- 年龄:${student.age}

${entr}
姓名:${entr.value.name} -- 年龄:${entr.value.age}

处理器类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 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


    
    items
    
    true
    
    true



    var
    true
    true

你可能感兴趣的:(java设计)