jsp自作标签【二】

前言

|ू・ω・` )
在前面的一章中已经给大家讲了下,标签是可以自己制作的。

简单回顾下,如果要自作标签:

  1. 重写c.tld文件,
  2. 并且对每个对应的标签写个标签助手类

欧克,今天主要是要写比较复杂的标签:

  • c:set
  • c:out
  • c:foreach
  • c:if
  • c:select

数据标签

z:set

今天的第一个来了
我们要做一个数据标签:z:set
在原有的c标签库里是:c:set

所谓数据标签:就是操作数据进行存储:

至于相关属性:我们可以参考:c标签

<c:set value="存储内容" var="存储名"> </c:out>

我们也是要制作一样的结果;

首先我们还是一样的配置好z.tld

注意:看有什么属性;

 
  <tag>
    <name>set</name>
    <tag-class>com.liwangwang.jsp2.SetTag</tag-class>
    <body-content>JSP</body-content>
    <attribute>
        <name>var</name>
        <required>false</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
     <attribute>
        <name>value</name>
        <required>false</required>
        <rtexprvalue>true</rtexprvalue>
    </attribute>
  </tag>

就是valuevar属性;
那么在一个标签助手类里要写一个value 的属性哦,接下来就不讲这个了

private Object value;
private String var

在这里插入图片描述
如果这个弄好了;
就可以写实现bodyTagSypport类下的方法:

  1. doStartTag();
  2. doAfterTag();
  3. doEndTag();

下面不会啰嗦了

比如思考咱们这个标签有没有用到body里面去
这个的路线:

doStartTag()---->doEndTag()
在这里插入图片描述
直接跳过body;
哎,还是把这个摆出来把
在这里插入图片描述
嗯,具体路线,看自己要自作的jsp标签而定。


控制标签

z:if标签

再说一次,当你需要写那个标签的时候,要把它的属性,思路给想清楚哦

1,这个标签的属性test;

然后就配置;

主要在助手类中:doStartTag();
在这里插入图片描述
不懂什么是 EVAL_BODY_INCLUDE (进入计算标签主体内容 ),SKIP_BODY (跳过主体)
,可以看看我上篇文章


z:foreach标签

1,这个标签的属性:

	private String var;
	private List<Object> items = new ArrayList<>();

在这里插入图片描述

@Override
	public int doStartTag() throws JspException {
		if(items.size()!=0) {
			Iterator<Object> it = items.iterator();
			pageContext.setAttribute(var, it.next());//如果有的话就进入到这里面
			pageContext.setAttribute("it", it);//将剩下的集合放入it中
			return EVAL_BODY_INCLUDE;
		}
		else {
			return SKIP_BODY;
		}
	}
	
	@Override
	public int doAfterBody() throws JspException {
		Iterator<Object> it = (Iterator<Object>) pageContext.getAttribute("it");//取出集合
		if(it.hasNext()) {//判断里面是否还有值
			pageContext.setAttribute(var, it.next());//如果有的话就进入到这里面
			pageContext.setAttribute("it", it);//将剩下的集合放入it中
			return EVAL_BODY_AGAIN;
		}
		else {
			return EVAL_PAGE;
		}
		
	}

UI标签

z:out标签

1,这个的属性

private Object value;

代码:
在这里插入图片描述

这个里面的重要代码为

JspWriter out = pageContext.getOut();

可以实列化一个out对象;

out.print(value.toString());

然后输出到jsp界面上


select 标签

1,这个的属性

private String id;//值的传递 : id name
private String name;//值的传递 : id name
private List<Object> items = new ArrayList<>();//数据源 : items
private String textKey;//展示列与数据存储列与实体类的对应关系: textKey textVal
private String textVal;//展示列与数据存储列与实体类的对应关系: textKey textVal
private String selectedVal;//数据回显 selectedVal
private String headerTextKey;//可能下拉框默认值(头标签)headerTextKey  headerTextVal
private String headerTextval;//可能下拉框默认值(头标签)headerTextKey  headerTextVal

这个就比较的多了,其实这个也涉及到数据字典的概念;
当然,如果认真的去思考一个下拉框有什么,也可以想出来的。
比如:

<select id = "" name ="">
	<option value="001">小李</option>
	<option value="002">小王</option>
</select>

还是那个方法:doStartTag();
在这里插入图片描述
看到这个toHtml()没有,主要就是输出一个StringBuffer 的字符串;

这个方法虽然很多东西,但是并不难
在这里插入图片描述

认真看的话,也不怎么难的


然后这个的总的思想的话,也就是将你所从数据库里调出来的数据,加入到助手类中,然后进行操作。

这么说吧,就是你只要写好了这个标签,并且将数据源传了过去,就可以自动的帮你写好jsp代码,然后通过:JspWriter out = pageContext.getOut();输出到页面上

怎么传呢

<z:select textVal="name" items="${list }"  textKey="id"></z:select>

这个可以简单解决很多事情;
在这里插入图片描述


checkbox标签

在很多地方,多可以用到复选框的选项,如果那可以以自己传一个数组过去,那他就给你打好jsp代码,那不会很happy嘛

我们先分析一下checkbox的代码属性有哪些:

input type=“checkbox” name="" value="" >

那么就这些:

	private String[] items;
	private String name;

配置好z.tld文件后,就可以处理助手类文件了

在这里插入图片描述
同样的doStartTag方法;也是ui标签
所以、
在这里插入图片描述
这个比select简单些
操作:
在这里插入图片描述
这样就可以直接打出checkbox了:
在这里插入图片描述
是不是相对于之前而言方便了许多;


总结

在要制作的过程中:
重点在于,把那个助手类的pageContext看做是引用的.jsp界面的;

也用到了迭代器,反射中获取属性;

是暂时知识得到了融合

Thanks♪(・ω・)ノ希望大家有所收获

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值