仿JSTL核心标签库中的一些重要标签

核心标签库和自定义标签库的作用:

代替页面中的JSP脚本,HTML页面中插入JSP脚本会使页面非常难以阅读,增加前端人员的难度,所以尽量使用标签代替JSP脚本.

本文仿照JSTL中的一些标签,设计一些功能相同的自定义标签,探究其实现原理

菜鸟一枚,有什么不足的地方多担待,仅供参考

tld文件声明:

<!-- 标签库的版本 -->
<tlib-version>1.1</tlib-version>
<!-- 标签库前缀 -->
<short-name>label</short-name>
<!-- tld文件的唯一标记 -->
<uri>wjj.0611.wl</uri>

1.set标签:<c:set></c:set>

作用:向域对象中保存数据

必须属性:var,value;

非必须属性:scope;

原理:将value对象保存到scope域中,命名为var,如果没有给出scope属性,默认为page域

实现:

tld文件配置:

<tag>
<name>set</name>
<tag-class>com.wjj.label.setLabel</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>var</name>
<required>true</required>
<fragment>false</fragment>
</attribute>
<attribute>
<name>value</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<fragment>false</fragment>
</attribute>
</tag>

实现类:

setLabel.java:
public class setLabel extends SimpleTagSupport {
private String var;
private Object value;
private String scope;

public void setVar(String var) {
this.var = var;
}

public void setValue(Object value) {
this.value = value;
}
public void setScope(String scope){
this.scope=scope;
}
public void doTag() throws JspException{
PageContext pagecontext = (PageContext)this.getJspContext();
if(scope == null) pagecontext.setAttribute(var, value);
else if(scope.equals("requestScope")) pagecontext.setAttribute(var, value,PageContext.REQUEST_SCOPE);
else if(scope.equals("sessionScope")) pagecontext.setAttribute(var, value,PageContext.SESSION_SCOPE);
else pagecontext.setAttribute(var, value,PageContext.APPLICATION_SCOPE);
}

}

2.out标签:<c:out value=""></c:out>

作用:获取域对象中数据

必须属性:value;

非必须属性:default

实现原理:通过EL表达式获得value对应的类再输出到页面上

tld文件配置:

<tag>
<name>out</name>
<tag-class>com.wjj.label.outLabel</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>value</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
<attribute>
<name>Default</name>
<required>false</required>
<fragment>true</fragment>
</attribute>
</tag>

实现类:

package com.wjj.label;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.SimpleTagSupport;

public class outLabel extends SimpleTagSupport {
private String value;
private String Default;
public void setValue(String value) {
this.value = value;
}
public void setDefault(String Default){
this.Default = Default;
}
public void doTag() throws JspException,IOException{
JspWriter out = this.getJspContext().getOut();
if(value == null) out.write(Default);
else out.write(value);
}
}

if标签:<c:if></c:if>

作用:但条件判断

必须属性:test

原理:test为一个boolean类型,如果test为true输出标签体,否则什么也不做

tld文件配置:

<tag>
<name>if</name>
<tag-class>com.wjj.label.ifLabel</tag-class>
<body-content>scriptless</body-content>
<attribute>
<name>test</name>
<required>true</required>
<fragment>true</fragment>
</attribute>
</tag>

实现类:

public class ifLabel extends SimpleTagSupport{
private boolean test;

public void setTest(boolean test) {
this.test = test;
}

public void doTag() throws JspException,IOException{
if(test) this.getJspBody().invoke(null);
}
}

待续......

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值