https://blog.youkuaiyun.com/weixin_39352976/article/details/79359916
1:首先 创建一个自定义标签
<fps:select />
2要创建自定义的JSP标签,你首先必须创建处理标签的Java类。所以,让我们创建一个SelectTag类,如下所示:
解释一下dictName,dictName="PAY_CHANNEL_CONF",这样就可以通过map来获取key=PAY_CHANNEL_CONF"对应的值,这个值就是List<TFpsBaseConf> cons对象,
<fps:select dictName="PAY_CHANNEL_CONF" id="channelAlias" defValue="${channelAlias}" name="channelAlias" />
下面这个是一个用来存储缓存的
public static Map<String, List<TFpsBaseConf>> SYS_CONSTS = new HashMap<String, List<TFpsBaseConf>>();
package *;
import java.io.IOException;
import java.util.List;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import com.zycfc.fps.admin.common.constants.FINConstants;
import com.zycfc.fps.core.orm.channel.domain.TFpsBaseConf;
/**
* select标签
* @author hp
*
*/
public class SelectTag extends BaseTag {
private static final long serialVersionUID = 1L;
//点击事件b
private String onClick;
//选择事件
private String onChange;
@Override
public int doEndTag() throws JspException {
StringBuilder sb = new StringBuilder();
StringBuilder option = new StringBuilder();
/**
* <select class="form-control input-small width-200px"
data-placement="bottom" name="bankCd" id="bankCd">
<option value="">--请选择--</option>
</select>
*/
sb.append("<select class=\"form-control input-small width-200px\"");
createBaseTag(sb);
sb.append(">");
option.append("<option value=\"\">-----请选择-----</option>");
if(onClick != null){
sb.append(" onclick=\"").append(onClick).append("();\"");
}
if(onChange != null){
sb.append(" onchange=\"").append(onChange).append("();\"");
}
if(dictName != null){
System.out.println("fps:select--------"+dictName+"---"+dictName.getClass());
List<TFpsBaseConf> cons = FINConstants.SYS_CONSTS.get(dictName);
if(cons != null){
for(TFpsBaseConf con : cons){
option.append("<option value=\"").append(con.getKey()).append("\" ");
if(defValue != null && defValue.equals(con.getKey())){
option.append("selected=\"selected\"");
}
option.append(">").append(con.getValue()).append("</option>");
}
}
}
sb.append(option);
sb.append("</select>");
JspWriter out = pageContext.getOut();
try {
//有权限 显示操作按钮
out.println(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
return super.doEndTag();
}
public String getOnClick() {
return onClick;
}
public void setOnClick(String onClick) {
this.onClick = onClick;
}
public String getOnChange() {
return onChange;
}
public void setOnChange(String onChange) {
this.onChange = onChange;
}
}
sb读取中,会定义select标签中的属性,
package com.zycfc.fps.admin.tag;
import javax.servlet.jsp.tagext.BodyTagSupport;
public class BaseTag extends BodyTagSupport {
private static final long serialVersionUID = 1L;
//标签ID
protected String id;
//标签名称
protected String name;
//标签class样式
protected String cssClass;
//标签style样式
protected String style;
//常量类型
protected String dictName;
//默认值
protected String defValue;
//只读
protected boolean readOnly = false;
//不可用
protected boolean disabled = false;
protected void createBaseTag(StringBuilder sb){
if(id != null){
sb.append(" id=\"").append(id).append("\" ");
}
if(name != null){
sb.append(" name=\"").append(name).append("\" ");
}
if(style != null){
sb.append(" style=\"").append(style).append("\" ");
}
if(readOnly){
sb.append(" readOnly=\"readOnly\" ");
}
if(disabled){
sb.append(" disabled=\"disabled\" ");
}
}
protected void createBaseTag2(StringBuilder sb){
if(name != null){
sb.append(" name=\"").append(name).append("\" ");
}
if(cssClass != null){
sb.append(" class=\"").append(cssClass).append("\" ");
}
if(style != null){
sb.append(" style=\"").append(style).append("\" ");
}
if(readOnly){
sb.append(" readOnly=\"readOnly\" ");
}
if(disabled){
sb.append(" disabled=\"disabled\" ");
}
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCssClass() {
return cssClass;
}
public void setCssClass(String cssClass) {
this.cssClass = cssClass;
}
public String getDefValue() {
return defValue;
}
public void setDefValue(String defValue) {
this.defValue = defValue;
}
public boolean isReadOnly() {
return readOnly;
}
public void setReadOnly(boolean readOnly) {
this.readOnly = readOnly;
}
public boolean isDisabled() {
return disabled;
}
public void setDisabled(boolean disabled) {
this.disabled = disabled;
}
public String getDictName() {
return dictName;
}
public void setDictName(String dictName) {
this.dictName = dictName;
}
public String getStyle() {
return style;
}
public void setStyle(String style) {
this.style = style;
}
}
3、对应的fps.tld文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN" "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>2.0</jsp-version>
<short-name>fpstag</short-name>
<uri>/tag/fps.tld</uri>
<description>FPS TAG CENTER</description>
<tag>
<name>select</name>
<tag-class>com.zycfc.fps.admin.tag.SelectTag</tag-class>
<description>页面select标签生成</description>
<attribute>
<name>id</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签ID</description>
</attribute>
<attribute>
<name>name</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签name</description>
</attribute>
<attribute>
<name>cssClass</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签样式class</description>
</attribute>
<attribute>
<name>dictName</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签常量类型</description>
</attribute>
<attribute>
<name>style</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签style样式</description>
</attribute>
<attribute>
<name>defValue</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签默认值</description>
</attribute>
<attribute>
<name>readOnly</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签是否只读</description>
</attribute>
<attribute>
<name>disabled</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签是否可用</description>
</attribute>
<attribute>
<name>onClick</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>标签点击事件</description>
</attribute>
<attribute>
<name>onChange</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<description>select标签选择事件</description>
</attribute>
</tag>
这样自定义标签就可以完成。