咱们平常开发中有时候常常遇到一个页面好多Select下拉框,下拉框的内容都被维护在一张字典表中,而后根据字典类型获取不一样的数据做为下拉列表展现。这样很繁琐,每次都要须要写一堆东西来初始化下拉选项,咱们能够利用jspTag自定义标签来完成。css
/** * <p> * <code>DictSelectTag</code> * </p> * 基于JspTag的公共选择下拉框 * @author jianzhang11 * @version 1.0 * @desc * @Date: 2016/5/18 18:43 * @since 1.0 */ public class DictSelectTag extends TagSupport{ //获取系统定义的service private BaseDicService baseDicService = SpringContextHolder.getBean("baseDicService"); private String id; private String name; private String value; private String type; /** * 前端CSS样式 */ private String cssStyle; @Override public String getId() { return id; } @Override public void setId(String id) { this.id = id; } public void setName(String name) { this.name = name; } public void setValue(String value) { this.value = value; } public void setType(String type) { this.type = type; } public void setCssStyle(String cssStyle) { this.cssStyle = cssStyle; } /** * 自定义标签实现 * @return * @throws JspException */ @Override public int doEndTag() throws JspException { JspWriter out = pageContext.getOut(); List<BaseDic> dicList = baseDicService.findBaseDicsByType(type); StringBuffer sb = new StringBuffer(); sb.append("<select name='"+name+"' id='"+this.getId()+"' class='"+cssStyle+"' >"); sb.append("<option value=''>--请选择--</option>"); for (BaseDic baseDic : dicList) { if(baseDic.getValue().equals(value)){ sb.append("<option value='"+baseDic.getValue()+"' selected='selected'>"); }else{ sb.append("<option value='"+baseDic.getValue()+"'>"); } sb.append(baseDic.getText()+"</option>"); } sb.append("</select>"); try { out.write(sb.toString()); } catch (IOException e) { e.printStackTrace(); } return TagSupport.EVAL_PAGE; } }
<?xml version="1.0" encoding="UTF-8"?> <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd" version="2.1"> <tlib-version>1.0</tlib-version> <short-name>dict</short-name> <uri>http://iflytek.com/dict_tag</uri> <tag> <description>Renders an HTML 'select' element. Supports databinding to the selected option.</description> <name>select</name> <tag-class>com.iflytek.esociety.common.tag.DictSelectTag</tag-class> <body-content>JSP</body-content> <attribute> <name>id</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>name</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>type</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>cssStyle</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag> </taglib>
<%@taglib prefix="dict" uri="/WEB-INF/tld/dict.tld" %> <dict:select name="hyzk" type="0004" value="${graduates.hyzk}"></dict:select>
简单三步便可在页面完成下拉框的渲染,在后台Service获取字典表内容的时候建议加上缓存,这样就不须要屡次查询数据库了!前端