mvc之自定义标签库(2)

本文详细介绍了自定义JSP标签的开发流程,包括创建助手类、编写tld文件和使用taglib指令。通过具体代码示例,如OutTag、IfTag、ForeachTag、SetTag和CheckboxTag,展示了如何实现UI标签、控制标签和数据标签等功能。

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

自定义标签开发步骤

1、 助手类
2 、tld
3 、taglib

UI标签

out:

代码示例如下:
OutTag.java
在这里插入图片描述
在这里插入图片描述
z.tld:
在这里插入图片描述

select:

代码示例:
SelectTag:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
z.tld:
在这里插入图片描述
在这里插入图片描述

控制标签

if:

代码示例如下:
IfTag:
在这里插入图片描述
z.tld:
在这里插入图片描述

forEach

代码示例如下:
ForeachTag.java:
在这里插入图片描述
在这里插入图片描述
z.tld:
在这里插入图片描述

数据标签(数据标签就是用来存储数据的)

set

代码示例如下:
SetTap.java:
在这里插入图片描述
在这里插入图片描述
z.tld:
在这里插入图片描述

checkbox:

CheckboxTag:

public class CheckboxTag extends BodyTagSupport{
	 private String textKey;
	 private String textVal;
	 private List<Object> checkedVal = new ArrayList<>();
	 private List<Object> item = new ArrayList<>();
 
	 public String getTextKey() {
	  	return textKey;
	 }
	 public void setTextKey(String textKey) {
		  this.textKey = textKey;
	 }
 	public String getTextVal() {
 		 return textVal;
 	}
	 public void setTextVal(String textVal) {
		  this.textVal = textVal;
	 }
	 public List<Object> getCheckedVal() {
		  return checkedVal;
	 }
	 public void setCheckedVal(List<Object> checkedVal) {
		  this.checkedVal = checkedVal;
	 }
	 public List<Object> getItem() {
		  return item;
	 }
	 public void setItem(List<Object> item) {
	 	 this.item = item;
	 }
	 @Override
	 public int doStartTag() throws JspException {
		  JspWriter out = pageContext.getOut();
		  try {
		  	 out.print(toHTML());
		  } catch (NoSuchFieldException e) {
		   	e.printStackTrace();
		  } catch (SecurityException e) {
		 	  e.printStackTrace();
		  } catch (IllegalArgumentException e) {
		 	  e.printStackTrace();
		  } catch (IllegalAccessException e) {
		 	  e.printStackTrace();
		  } catch (IOException e) {
		 	  e.printStackTrace();
		  }
			  return super.doStartTag();
		 }
		 private String toHTML() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
				  StringBuffer sb = new StringBuffer();
				  String value;
				  String html;
				  for (Object obj : item) {
				   Field field = obj.getClass().getDeclaredField(textKey);
				   field.setAccessible(true);
				   value = (String) field.get(obj);
				   Field field2 = obj.getClass().getDeclaredField(textVal);
				   field2.setAccessible(true);
				   html = (String) field2.get(obj);
				   if(checkedVal.contains(value)) {
				    	sb.append("<input checked type='checkbox' value='"+value+"' />"+html+"");
				   }else {
				  	  sb.append("<input type='checkbox' value='"+value+"' />"+html+"");
				   }
				  }
					  return sb.toString();
			}
		}

z.tld:

<tag>
     <name>checkbox</name>
     <tag-class>com.liyi.jsp.CheckboxTag</tag-class>
     <body-content>JSP</body-content>
     <attribute>
         <name>textKey</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <name>textVal</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <name>item</name>
         <required>true</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>
     <attribute>
         <name>checkedVal</name>
         <required>false</required>
         <rtexprvalue>true</rtexprvalue>
     </attribute>
   </tag>```

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值