自定义EL函数(入门)

* 自定义EL函数(入门)

* 编写一个类,方法必须是静态方法。
* 在WEB-INF目录下创建tld的文件,配置。
* 选择2.0

* 完成配置
<!-- 配置自定义的EL函数 -->
<function>
<!-- 配置方法名称 -->
<name>sayHi</name>
<!-- 方法所在的类 -->
<function-class>cn.itcast.el.ElDemo1</function-class>
<!-- 配置方法的签名 -->
<function-signature>java.lang.String sayHello(java.lang.String)</function-signature>
</function>


* 自定义标签
* 实现SimpleTag接口
* 编写一个类,继承SimpleTagSupport类。
* 重写5个方法
* void setJspContext(JspContext pc)
* void setParent(JspTag parent)
* void setJspBody(JspFragment jspBody)  
* void doTag()

* JspTag getParent() 

* 快速入门的步骤(自定义没有标签体的标签)
* 编写一个类,继承SimpleTagSupport。
* 选择重写的方法,doTag()必须有的。
* 需要配置
<!-- 配置自定义标签 -->
<tag>
<!-- 配置标签名称 -->
<name>print</name>
<!-- 配置标签的类 -->
<tag-class>cn.itcast.tag.TagDemo1</tag-class>
<!-- 配置标签主体 -->
<body-content>empty</body-content>
</tag>
* 在JSP页面上,引入标签库
<%@ taglib uri="http://www.itcast.cn/1110/myc" prefix="myc" %>  
* 使用标签了。

* 带有标签主体的标签
* 编写类,继承SimpleTagSupport。
* 重写doTag()
* 获取标签主体对象
JspFragment jf = getJspBody();
jf.invoke(null);
* 配置
<!-- 配置自定义标签 -->
<tag>
<!-- 配置标签名称 -->
<name>out</name>
<!-- 配置标签的类 -->
<tag-class>cn.itcast.tag.TagDemo2</tag-class>
<!-- 配置标签主体 -->
<body-content>scriptless</body-content>
</tag>

<body-content>元素的可选值有:
empty:不能有标签体内容。
JSP:标签体内容可以是任何东西:EL、JSTL、<%=%>、<%%>,以及html;但不建议使用Java代码段,SimpleTag已经不再支持使用<body-content>JSP</body-content>;
scriptless:标签体内容不能是Java代码段,但可以是EL、JSTL等;
tagdependent:标签体内容不做运算,由标签处理类自行处理,无论标签体内容是EL、JSP、JSTL,都不会做运算。


* 带有属性的标签
* * 编写类,继承SimpleTagSupport。
* 重写doTag()
* 编写一个属性,属性必须和标签中的属性是相同
* 提供set方法
* 获取标签主体对象
JspFragment jf = getJspBody();
jf.invoke(null);
* 配置
<!-- 配置自定义标签 -->
<tag>
<!-- 配置标签名称 -->
<name>if</name>
<!-- 配置标签的类 -->
<tag-class>cn.itcast.tag.TagDemo3</tag-class>
<!-- 配置标签主体 -->
<body-content>scriptless</body-content>
<!-- 配置属性 -->
<attribute>
<!-- 配置属性名称 -->
<name>test</name>
<!-- 属性是否是必须的 -->
<required>true</required>
<!-- 是否支持EL表达式 -->
<rtexprvalue>true</rtexprvalue>
<!-- 属性的类型 -->
<type>boolean</type>
</attribute>

</tag>

示例:

<taglib version="2.1" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web jsptaglibrary_2_1.xsd">
<tlib-version>1.0</tlib-version>
<short-name>my</short-name>
<uri>http://www.itcast.cn/tag</uri>
<tag>
<name>sex</name><!-- 标签名称 -->
<tag-class>cn.itcast.customer.tag.GenderTag</tag-class><!-- 标签类 -->
<body-content>empty</body-content><!-- 标签体中内容 -->
<attribute>
<name>gender</name> <!-- 属性名称 -->
<required>true</required> <!-- 属性必须有 -->
<rtexprvalue>true</rtexprvalue><!-- 属性值可以接收el表达式 -->
</attribute>
</tag>
</taglib>

public class GenderTag extends SimpleTagSupport {
private String gender;
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public void doTag() throws JspException, IOException {
StringBuffer buff = new StringBuffer();
if ("男".equals(gender)) {
buff.append("<input type='radio' name='gender' value='男' checked='checked'>男<input type='radio' name='gender' value='女'>女<br>");
} else {
buff.append("<input type='radio' name='gender' value='男'>男<input type='radio' name='gender' value='女' checked='checked'>女<br>");
}
this.getJspContext().getOut().write(buff.toString());
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangkaixuan456

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值