本章目标:
- 自定义标签开发步骤
- 标签分类
- UI标签
- 控制标签
- 数据标签
==================================================
-
自定义标签开发步骤
1)创建助手类
2)tld(标签库描述文件)
3)taglib引用 -
标签分类
标签按功能分:UI标签、控制标签、数据标签
1)UI标签:用户界面标签,用于输出显示。
2)控制标签:用于流程控制,判断、循环等。
3)数据标签:为其他web控件提供数据。 -
UI标签
z:out
z:select注1:分析c标签库中的out,看属性,助手类中封装相应的属性。
注2:JspWriter writer = pageContext.getOut(); -
控制标签
z:if
z:forEach注1:page(pageContext)|request(…)|session(…)|application(…)
存储和交换数据 -
数据标签
z:deptList
做项目时,且该数据被调用的频率非常高。缓存catch
案例1:省市联动,一开始加载省级数据,选择省后会再次访问数据库获取该省的市。
这样就再次访问的数据库,其实可以通过数据标签来实现。
1)编写dao方法,返回一个集合数据(写死)
2)创建标签助手类DeptList,私有化var(get和set),仅做访问dao获得数据,并绑定。
3)doStartTag()
List<Dept> list = deptDao.list();
pageContext.setAttribute(var, list);
return SKIP_BODY;
4)在tld中配置
数据调用频繁时使用。
也可以用来做缓存,自学ehcache
案例2:下拉框标签
1)需要数据源 List items
2)需要属性name String name
3)需要属性value String valueKey
4)需要内容text String textKey
@Override
public int doStartTag() throws JspException {
try {
JspWriter writer = pageContext.getOut();
String html = this.toHTML();
System.out.println(html);
writer.println(html);
return SKIP_BODY;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
// 生成一个select标签的
private String toHTML() throws Exception {
StringBuffer bf = new StringBuffer();
bf.append("<select");
bf.append(" name=\"" + this.name + "\"");
bf.append(">");
if (null != items) {
// <option value='1'>研发部</option>
Object value = null;
Object text = null;
for (Object bean : items) {// dept
value = PropertyUtils.getProperty(bean, valueKey);
text = PropertyUtils.getProperty(bean, textKey);
if(value.equals(selectedOptionValue)) {
bf.append("<option selected value='" + value + "'>" + text + "</option>");
}else {
bf.append("<option value='" + value + "'>" + text + "</option>");
}
}
}
bf.append("</select>");
return bf.toString();
}
<z:select items="${deptList}" name=“did” valueKey=“deptId” textKey=“deptName” />