開發過程中經常會重複用到select 載入字典表中的資料,比如載入職務、學曆等等這些,每次用到都進行單獨擷取然後在前端進行遍曆的話會很麻煩,而且不符合開發原則。因此可以通過自訂標籤的方式進行封裝。舉例 如下:
ynbytag.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"> <description>YNBY 統一自訂標籤</description> <display-name>YNBY core</display-name> <tlib-version>1.1</tlib-version> <short-name>ynby</short-name> <tag> <name>demo</name> <tag-class>com.rdpm.sysm.service.taglib.DemoTag</tag-class> <body-content>empty</body-content> </tag> <tag> <!--定義屬性的名稱。每個標籤的是屬性名稱必須是唯一的。--> <name>selectTag</name> <tag-class>com.rdpm.sysm.service.taglib.DictSelectTag</tag-class> <body-content>empty</body-content> <!--系統編碼--> <attribute> <name>systemCode</name> <!--指定屬性是否是必須的或者可選的,如果設定為false為可選。--> <required>true</required> <!--聲明在運行運算式時,標籤屬性是否有效。--> <rtexprvalue>true</rtexprvalue> </attribute> <!--select 的name值--> <attribute> <name>selectName</name> <!--指定屬性是否是必須的或者可選的,如果設定為false為可選。--> <required>true</required> <!--聲明在運行運算式時,標籤屬性是否有效。--> <rtexprvalue>true</rtexprvalue> </attribute> <!--value 選中的值--> <attribute> <name>value</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--預設選中的值--> <attribute> <name>selectedValue</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--選中任意一項時觸發的方法--> <attribute> <name>onChange</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--選擇方式 單選/多選--> <attribute> <name>multiple</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--select 未選擇時顯示內容 如:"請選擇"或者"所有"等--> <attribute> <name>nullName</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--select 未選擇時顯示內容的位置 在頂部還是在底部--> <attribute> <name>nullNamePlace</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--是否有下一級--> <attribute> <name>hasNext</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--上級ID--> <attribute> <name>parentId</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--額外的一些顯示層的參數--> <!--樣式類--> <attribute> <name>cssClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> <!--內聯樣式--> <attribute> <name>styleClass</name> <required>false</required> <rtexprvalue>true</rtexprvalue> </attribute> </tag></taglib>
DictSelectTag.java
package com.rdpm.sysm.service.taglib;import com.rdpm.sysm.dao.BaseParameterMapper;import com.rdpm.sysm.entity.BaseParameter;import com.rdpm.sysm.util.SpringContextUtil;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.ApplicationContext;import org.springframework.stereotype.Service;import javax.annotation.Resource;import javax.servlet.jsp.JspException;import javax.servlet.jsp.JspWriter;import javax.servlet.jsp.tagext.TagSupport;import java.io.IOException;import java.util.List;/** * Created by XJM on 2016-07-12. */public class DictSelectTag extends TagSupport { //額外的一些顯示層的參數 private String cssClass;//樣式類 private String styleClass;//內聯樣式 private String systemCode;//參數系統編碼 private String selectName;//select 的name值 private String nullName;//未選擇時給的提示資訊選項 private String value;//選中的值 private String selectedValue;//選中的值 private String onChange;//改變時調用的方法 private String multiple;//選擇方式 多選/單選 @Override public int doEndTag() throws JspException {
//SpringContextUtil 在最下面 BaseParameterMapper baseParameterMapper= (BaseParameterMapper) SpringContextUtil.getBean("baseParameterMapper"); List<BaseParameter> list= baseParameterMapper.selectParamByParamTypeCode(systemCode); StringBuffer sb = new StringBuffer(); JspWriter out = pageContext.getOut(); sb.append("<select name=\""+this.getSelectName()+"\""); if (!StringUtils.isEmpty(this.getCssClass())){ sb.append("class=\"" + this.getCssClass() + "\""); } if(!StringUtils.isEmpty(this.getStyleClass())){ sb.append("style=\"" + this.getStyleClass() + "\""); } if(!StringUtils.isEmpty(this.getMultiple())){ sb.append("multiple=\"" + this.getMultiple() + "\""); } if(!StringUtils.isEmpty(this.getOnChange())){ sb.append("onchange=\"" + this.getOnChange() + "\""); } sb.append(">"); if(!StringUtils.isEmpty(this.getNullName())){ sb.append("<option value=\"\">--"+this.getNullName()+"--</option>"); } for(BaseParameter dc:list){ if (dc.getDictValue().equals(this.getSelectedValue())){ sb.append("<option value=\""+dc.getDictValue()+"\" selected>"); }else { sb.append("<option value=\""+dc.getDictValue()+"\">"); } sb.append(dc.getDictName()+"</option>"); } sb.append("</select>"); try { out.write(sb.toString()); } catch (IOException e) { // TODO Auto-generated catch block throw new JspException(e); } return TagSupport.EVAL_PAGE; } public String getCssClass() { return cssClass; } public void setCssClass(String cssClass) { this.cssClass = cssClass; } public String getStyleClass() { return styleClass; } public void setStyleClass(String styleClass) { this.styleClass = styleClass; } public String getSystemCode() { return systemCode; } public void setSystemCode(String systemCode) { this.systemCode = systemCode; } public String getSelectName() { return selectName; } public void setSelectName(String selectName) { this.selectName = selectName; } public String getNullName() { return nullName; } public void setNullName(Str