jsp自定义标签 Tag文件版
实现一个与上篇文章类似的Select标签功能
1.在WEB-INF/tags/select.tag
${attrEntry.key}="${attrEntry.value }"
>
${option}
这里要注意tag文件只能放在如下位置:
1.WEB-INF/tags
2.WEB-INF/tags的子目录
3.WEB-INF/lib中jar包的META-INF/tags
4.WEB-INF/lib中jar包的META-INF/tags下的子目录
5.jar包中的tag文件需要tld
添加jstl.jar与standard.jar到WEB-INF/lib目录,还有一点就是上面标红的部分:不要使用http://java.sun.com/jstl/core这个url,否则会报foreach中的item属性有问题
2.在jsp中的使用
pageEncoding="UTF-8"%>
Insert title hereList colorList = new ArrayList();
colorList.add("red");
colorList.add("blue");
colorList.add("white");
request.setAttribute("colorList",colorList);
%>
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
jsp 自定义标签
jsp标签有两组api
JspTag ->SimpleTag ->SimpleTagSupport
JspTag ->Tag ->IterationTag->BodyTag
第二组是classic的,比较早的使用方式,doStartTag(),doEndTag()有N多返回值的那种,使用起来也确实不方便,今天学到了另一个使用第一组api方式的,让人大快人心,贴码
例子是一个Select的标签,支持动态属性设置
1.编写标签类
public class SelectTagHandler extends SimpleTagSupport implements DynamicAttributes {
private static final String ATTR_TEMPLATE = "%s='%s'";
private static final String OPTION_TEMPLATE = "%1$s";
private List optionsList;
private String name;
private String size;
private Map tagAttrs = new HashMap();
public void setName(String name) {
this.name = name;
}
public void setSize(String size) {
this.size = size;
}
public void setOptionsList(List optionsList) {
this.optionsList = optionsList;
}
@Override
public void doTag() throws JspException, IOException {
PageContext pageContext = (PageContext) getJspContext();
JspWriter out = pageContext.getOut();
out.print("
out.print(String.format(ATTR_TEMPLATE, "name", this.name));
out.print(String.format(ATTR_TEMPLATE, "size", this.size));
for (String attrName : tagAttrs.keySet()) {
String attrDefinition = String.format(ATTR_TEMPLATE, attrName, tagAttrs.get(attrName));
out.print(attrDefinition);
}
out.print(">");
for (Object option : this.optionsList) {
String optionTag = String.format(OPTION_TEMPLATE, option.toString());
out.println(optionTag);
}
out.println("
");}
@Override
public void setDynamicAttribute(String uri, String name, Object value) throws JspException {
tagAttrs.put(name, value);
}
}
看到没,代码如此的简洁,动态属性配置也十分的方便,不用写N多个setter与getter方法.
2.编写tld文件WebRoot/tld/select.tld
xmlns:xsi="http://www.w3g.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0">
1.2
1.2
Forms Taglib
http://hi.baidu.com/tags/forms
An example tab library of replacements for the html form tags.
select
com.baidu.hi.tag.SelectTagHandler
empty
optionsList
true
true
java.util.List
name
true
size
true
true
3.在jsp中的使用
pageEncoding="UTF-8"%>
Insert title hereList colorList = new ArrayList();
colorList.add("red");
colorList.add("blue");
colorList.add("white");
request.setAttribute("colorList",colorList);
%>