自定义jstl函数、自定义jstl标签

来源:互联网 发布:ultra iso ubuntu 编辑:程序博客网 时间:2024/05/16 17:41

1.首先说明:
servelet2.4以后tld文件不需要在web.xml中配置
有两种方式使用自动加载

  1、打成jar包时,将tld文件放在META-INF文件夹下(参考standard,jar)

  2、直接将自定义tld文件放在WEB-INF下

正文开始:
2.创建自定义jstl函数和标签,实现效果:
<!--jsp body中代码-->
这里是测试自定义函数:${myfn:spitmine('中国') }<br>
 这里是自定义标签:<mytag:hellotag></mytag:hellotag>
<!--jsp body中代码-->
输出结果如下
这里是测试自定义函数:中国(这是jstl自定义函数返回的字符串)
这里是自定义标签:helloworld
3.先说创建jstl函数
第一步创建JstlFunctionDesign.java 注意spitmine方法声明为static类型
 package com.test.jstl;
public class JstlFunctionDesign {
 public static String spitmine(String content){
  return content+"(这是jstl自定义函数返回的字符串)";
 }
}

第二步创建tld文件JstlFunctionDesign.tld,位置在web-inf下
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
 version="2.0">
 <description>my jstl functions library</description>
 <display-name>my jstl functions</display-name>
 <tlib-version>1.0</tlib-version>
 <short-name>myfn</short-name>
 <uri>http://www.kbq.com/myfn</uri>

 <function>
  <name>spitmine</name>
  <function-class>com.test.jstl.JstlFunctionDesign</function-class>
  <function-signature>
      java.lang.String spitmine(java.lang.String)
  </function-signature>
 </function>
</taglib>


4.创建自定义标签
第一步创建JstlTagDesign.java,继承javax.servlet.jsp.tagext.TagSupport或者javax.servlet.jsp.tagext.Tag
package com.test.jstl;

import java.io.IOException;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.Tag;
import javax.servlet.jsp.tagext.TagSupport;

public class JstlTagDesign  extends TagSupport  {
 private PageContext pagecontext;
 @Override
 public int doEndTag() throws JspException {
  // TODO Auto-generated method stub
  System.out.println("doEndTag");
  return SKIP_BODY;
 }

 @Override
 public int doStartTag() throws JspException {
  System.out.println("doStartTag");
  try {
   pagecontext.getOut().println("helloworld");
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
  return 0;
 }

 @Override
 public Tag getParent() {
  // TODO Auto-generated method stub
  System.out.println("getParent");
  return null;
 }

 @Override
 public void release() {
  System.out.println("release");
  // TODO Auto-generated method stub
  
 }

 @Override
 public void setPageContext(PageContext arg0) {
   System.out.println("设置PageContext对象!"); 
    this.pagecontext = arg0;
 }

 @Override
 public void setParent(Tag arg0) {
  System.out.println("setParent");
  // TODO Auto-generated method stub
  
 }
}
第二部创建tld,JstlTagDesign.tld
<?xml version="1.0" encoding="UTF-8"?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
 version="2.0">
 <description>my jstl functions library</description>
 <display-name>my jstl functions</display-name>
 <tlib-version>1.0</tlib-version>
 <short-name>mytag</short-name>
 <uri>http://www.kbq.com/mytag</uri>

 <tag>
 <name>hellotag</name>
 <tag-class>com.test.jstl.JstlTagDesign</tag-class>
 <body-content>JSP</body-content>
 </tag>
</taglib>

5.测试jspJ,stlFunctionDesignTest.jsp
头部需要引入
<%@ taglib uri="http://www.kbq.com/myfn" prefix="myfn" %>
<%@ taglib uri="http://www.kbq.com/mytag" prefix="mytag" %>
.....
 <body>
  这里是测试自定义函数3341:${myfn:spitmine('中国') }<br>
  <!--  -->
 
  这里是自定义标签222:<mytag:hellotag></mytag:hellotag>
  </body>

6.web.xml也可以对tld引用路径进行设置,也可以不设置
  <jsp-config>
    <taglib>
     <taglib-uri>http://www.kbq.com/myfn2</taglib-uri>
     <taglib-location>/WEB-INF/JstlFunctionDesign.tld</taglib-location>
    </taglib>
    <!-- <taglib>
     <taglib-uri>http://www.kbq.com/mytag</taglib-uri>
     <taglib-location>/WEB-INF/JstlTagDesign.tld</taglib-location>
    </taglib>
    -->
  </jsp-config>

0 0
原创粉丝点击