JSP自定义标签

本文介绍了如何创建和使用JSP自定义标签。首先,通过创建SelectTag Java类来处理标签逻辑,利用dictName参数从缓存中获取List数据。例如,<fps:select dictName="PAY_CHANNEL_CONF" id="channelAlias" defValue="${channelAlias}" name="channelAlias" />。接着,讲解了用于存储缓存的静态Map。最后,提到了fps.tld配置文件在自定义标签中的作用,从而完成标签的定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
	

这样自定义标签就可以完成。

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值