自定义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<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>

猜你喜欢

转载自blog.csdn.net/newVenues/article/details/70785420