您正在使用 IPV4 [13.58.82.79] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 劳动节 014
2024年 端午节 054
2025年 元 旦 259
2025年 春 节 287
 
您现在的位置:首页 >> JSP >> 内容
本类新增
本类热门
jsp简单自定义标签的forEach遍历及转义字符示例
内容摘要: 如果forEach中的items类型是map或者Collection类型的,怎样使用增强for循环;首先还是创建一个标签处理器类,定义两个属性,Stringvar;Objectitems;因为items要迭代各种集合,所以要使用Object;然后重写setter方法;声明一个成员变量,集合类型的,和上面两个属性是不相同的,这个是用在类里的,在items的se......
如果<forEach>中的items类型是map或者Collection类型的,怎样使用增强for循环;

首先还是创建一个标签处理器类,定义两个属性,Stringvar;Objectitems;

因为items要迭代各种集合,所以要使用Object;

然后重写setter方法;

声明一个成员变量,集合类型的,和上面两个属性是不相同的,这个是用在类里的,

在items的setter方法中,判断items的类型

然后继承他的doTag方法;

代码如下:

publicclassForEachTag2extendsSimpleTagSupport{

privateStringvar;

privateObjectitems;

privateCollectioncollection;

publicvoidsetVar(Stringvar){

this.var=var;

}

publicvoidsetItems(Objectitems){

this.items=items;

if(itemsinstanceofMap){

Mapmap=(Map)items;

collection=map.entrySet();

}

if(itemsinstanceofCollection){//setlist

collection=(Collection)items;

}

if(items.getClass().isArray()){

collection=newArrayList();

intlen=Array.getLength(items);

for(inti=0;i<len;i++){

Objectobj=Array.get(items,i);

collection.add(obj);

}

}

}

@Override

publicvoiddoTag()throwsJspException,IOException{

Iteratoriterator=collection.iterator();

while(iterator.hasNext()){

Objectobj=iterator.next();

this.getJspContext().setAttribute(var,obj);

this.getJspBody().invoke(null);

}

}

}

然后,写tld描述标签

代码如下:

<tag>

<name>forEach2</name>

<tag-class>com.csdn.items.ForEachTag2</tag-class>

<body-content>scriptless</body-content>

<attribute>

<name>var</name>

<required>true</required>

</attribute>

<attribute>

<name>items</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

最后在jsp文件中写items的各种类型

代码如下:

<%

Mapmap=newHashMap();

map.put("aa","aaaa");

map.put("bb","bbbb");

map.put("cc","cccc");

map.put("dd","dddd");

map.put("ee","eeee");

request.setAttribute("map",map);

%>

<c:forEach2var="str"items="${map}">

${str.key}-----${str.value}<br/>

</c:forEach2>

<%

String[]strs={"aa","bb","cc"};

request.setAttribute("strs",strs);

%>

<c:forEach2var="str"items="${strs}">

${str}<br>

</c:forEach2>

接下里是一个转义的自定义标签:

步骤都一样:

代码如下:

publicvoiddoTag()throwsJspException,IOException{

JspFragmentjf=this.getJspBody();//获取jsp文件中的内容

StringWritersw=newStringWriter();//获取一个流对象

jf.invoke(sw);//吧内容放到流对象中

Strings=sw.toString();//把jsp内容转成字符串

s=filter(s);//获取进行转义之后的字符

this.getJspContext().getOut().write(s);//写入浏览器

}

publicStringfilter(Stringmessage){//对字符串进行转义的方法

if(message==null)

return(null);

charcontent[]=newchar[message.length()];

message.getChars(0,message.length(),content,0);

StringBufferresult=newStringBuffer(content.length+50);

for(inti=0;i<content.length;i++){

switch(content[i]){

case'<':

result.append("<");

break;

case'>':

result.append(">");

break;

case'&':

result.append("&");

break;

case'"':

result.append(""");

break;

default:

result.append(content[i]);

}

}

return(result.toString());

}

}

接下来就一样了,

代码如下:

<tag>

<name>htmlFilter</name>

<tag-class>com.csdn.items.HTMLFilter</tag-class>

<body-content>scriptless</body-content>

</tag>

<c:htmlFilter>

<ahref="">aaa</a>

</c:htmlFilter>

Jsp标签文件的内容原样输出

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:JSP和Struts解决用户退出问题

 

下一篇:JSP上传文件到指定位置实例代码

发布日期:2023/5/5
手机扫二维码直达本页
发布时间:14:40:56
点  击:3
录  入:齐天大圣
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....