自定义标签主要有两种方式:
方式1:定义一个类继承TagSupport或它的子类,重写相关方法以及自己的方法,当然也可以不继承上述类,自己写类;其次是编写tld文件,进行标签和方法的描述;在web.xml中进行注册。上篇以简要介绍过。
方式2:在WEB-INF下建一个tags文件夹,存放自己的标签;建一个jsp文件,将后缀名改为tag,文件名改为这个标签的功能名称,下面举个列子:
在WEB-INF下的tags建一个jsp命名为hello.tag,将page指令改为tag指令里面具体内容如下:
//attribute有一rtexprvalue默认值为true,表示可以用EL表达式给这个属性赋值。
//required为true表示必填的属性,其默认值为false
//type 为前面name属性的类型
${name}
${ind.index+1}, ${s}
接下看看在index.jsp中的引用,代码如下:
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
List ss = new ArrayList(){{
add("hello");
add("world");
add("你好");
}};
//request.setAttribute("ss", ss);
%>
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
">
My JSP 'index.jsp' starting page"/>
值得注意的:
当我们在index.jsp中用存储一个值时,我们的hello.tag标签中是拿不到的,因为值的范围在pageContext,可以在标签中将存储范围改为request。解析时,tag变为jsp的一部分,所以request可以。
个人对这份理解,这个自定义的hello.tag就像是html的函数!
有不正之处还请指正!Thank you!