您的位置:首页 > 其它

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

2017-04-26 10:05 543 查看
问题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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息