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

来源:互联网 发布:满族饮食 知乎 编辑:程序博客网 时间:2024/05/29 18:53

问题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;
}

@Overridepublic 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>

0 0