使用自定義標籤構造select下拉框

咱們平常開發中有時候常常遇到一個頁面好多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;
    }
}
  • 新建tld文件配置標籤
<?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獲取字典表內容的時候建議加上緩存,這樣就不須要屢次查詢數據庫了!前端

相關文章
相關標籤/搜索