欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于自定义标签的开发说明

程序员文章站 2022-04-25 21:50:35
...

自定义标签是JavaWeb的一部分非常重要的核心功能,我们之前就说过,JSP规范说的很清楚,就是Jsp页面中禁止编写一行Java代码,就是最好不要有Java脚本片段,下面就来看一下自定义标签的简介:

自定义标签主要用于移除Jsp页面中的java代码。
移除jsp页面中的java代码,只需要完成两个步骤:
编写一个实现Tag接口的Java类继承SimpleTagSupport,并覆盖doTag方法,把jsp页面中的java代码写到doTag方法中,目的是使用该方法来控制标签页面。
编写标签库描述符(tld)文件,在tld文件中对自定义标签进行描述。
完成以上操作,即可在JSP页面中导入和使用自定义标签。

 

 

JAVA部分代码:

public class TestTaglib extends SimpleTagSupport{

private Long columnSize;

 

private String titles;

 

@Override

public void doTag() throws JspException, IOException {

JspFragment bodyContent = getJspBody();

//bodyContent.invoke(null);

 

//1、利用StringWriter得到标签体的内容

StringWriter sw = new  StringWriter();

bodyContent.invoke(sw);

//2、把标签体的内容全部变成大写

String context = sw.toString().toUpperCase();

 

//3、获取jsp的隐含对象out,将内容输出到页面上

getJspContext().getOut().println(context);

}

 

public Long getColumnSize() {

return columnSize;

}

 

public void setColumnSize(Long columnSize) {

this.columnSize = columnSize;

}

 

public String getTitles() {

return titles;

}

 

public void setTitles(String titles) {

this.titles = titles;

}

 

 

 

 

 

 

}

 

 

tld文件:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglibrary_1_1.dtd">

<taglib>

<tlibversion>1.2</tlibversion>

<jspversion>1.1</jspversion>

<shortname>myLib</shortname>

<uri>http://struts.apache.org/tags-html</uri>

<tag>

<name>testJspFragment</name>   <!-- 标签对应的名称 -->

<tagclass>com.umsdc.tag.TestTaglib</tagclass> <!-- 标签对应的类 -->

<bodycontent>scriptless</bodycontent>

 

<!-- 三个属性 -->

<attribute>

<name>columnSize</name>  <!-- columnSize属性 -->

<required>true</required>  <!-- 是否必须项 -->

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>titles</name>

<required>true</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

<attribute>

<name>data</name>

<required>false</required>

<rtexprvalue>true</rtexprvalue>

</attribute>

</tag>

</taglib>

 

 web.xml部分配置

   <jsp-config>

      <taglib>

         <taglib-uri>www.sjcj.com/taglib/core</taglib-uri>

         <taglib-location>/WEB-INF/my-taglib.tld</taglib-location>

      </taglib>

   </jsp-config>

  

 

jsp部分的使用:

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<%@taglib uri="www.sjcj.com/taglib/core" prefix="sj" %>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

  <head>

    <base href="<%=basePath%>">

    

    <title>My JSP 'index.jsp' starting page</title>

<meta http-equiv="pragma" content="no-cache">

<meta http-equiv="cache-control" content="no-cache">

<meta http-equiv="expires" content="0">    

<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

<meta http-equiv="description" content="This is my page">

<!--

<link rel="stylesheet" type="text/css" href="styles.css">

-->

  </head>

  

  <body>

      <sj:testJspFragment columnSize="12" titles="hellojsp">I am a Chinesase ,I love  my motherland </sj:testJspFragment>

  </body>

 

</html>

 

 

 

注意事项:名称需要对应好,标签中如果存在属性,那么java文件必须中必须配置相应属性的set()和get()

属性存在的必须性是在xxxx.tld中进行控制的。