JSP简单标签带属性开发

1、开发带属性的标签,标签处理器类中属性要有相应setter方法,符合javaBean规范

2、tld文件中进行相应属性标签配置

属性配置相关说明如下图

3、简单标签带属性的例子

1)、通过设置标签属性,自定义循环标签体次数;基本数据类型,JSP页面传递字符串时可以自动转换成相应类型,复合数据类型就不能自动转换,如Date

package TagDemo;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;

public class SimpleTagWithAttrDemo extends SimpleTagSupport {
    private int count;

    public void setCount(int count) {
        this.count = count;
    }

    @Override
    public void doTag() throws JspException, IOException {
        JspFragment fragment = this.getJspBody();
        for (int i = 0; i < this.count; i++) {
            fragment.invoke(null);
        }
    }
}

带属性的自定义简单标签

<?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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
    <description>自定义标签</description>

    <tlib-version>1.0</tlib-version>

    <short-name>SDT</short-name>

    <uri>/sefDefineTag</uri>
    <tag>
        <name>tagDemo</name>
        <tag-class>TagDemo.TagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <description>测试循环</description>
        <name>iteration</name>
        <tag-class>TagDemo.IterationTagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <description>测试修改标签体内容</description>
        <name>bodytag</name>
        <tag-class>TagDemo.BodyTagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <name>simpleTag</name>
        <tag-class>TagDemo.SimpleTagDemo</tag-class>
        <!--简单标签中,body-content中一般设置成empty或scriptless,如果设置成JSP会抛异常;
        传统标签中,body-content中一般设置成empty或JSP;
        如果body-content设置成tagdependent,那么标签体里的内容是给标签处理类使用的,
        例如:标签体里的SQL语句,就可以设置成tagdependent,标签处理器类得到SQL语句处理-->
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleIterationTag</name>
        <tag-class>TagDemo.SimpleIterationTagDemo</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleBodyTag</name>
        <tag-class>TagDemo.SimpleBodyTagDemo</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleEndPageTag</name>
        <tag-class>TagDemo.SimpleEndPageTagDemo</tag-class>
        <body-content>empty</body-content>
    </tag>
    <tag>
        <name>simpleTagAttr</name>
        <tag-class>TagDemo.SimpleTagWithAttrDemo</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <description>标签处理器类count属性值</description>
            <name>count</name>
            <required>true</required>
            <!--rtexprvalue用来指示属性值是否可以是一个表达式-->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

tld文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="sdt" uri="/sefDefineTag" %>
<html>
<head>
    <title></title>
</head>
<body>
<h1>下面是自定义标签:</h1>
<h6>---------------------------------------------</h6>

<sdt:tagDemo><%="java代码"%>标签体</sdt:tagDemo>
<br/>
<br/>
<sdt:iteration>循环标签体5次<br/></sdt:iteration>
<br/>
<br/>
<sdt:bodytag>abc</sdt:bodytag>
<br/>
<br/>
<sdt:simpleTag>简单标签体</sdt:simpleTag>
<br/>
<br/>
<sdt:simpleIterationTag>简单标签体循环5次<br/></sdt:simpleIterationTag>
<br/>
<br/>
<sdt:simpleBodyTag>abccde</sdt:simpleBodyTag>
<br/>
<br/>
<%--<sdt:simpleEndPageTag></sdt:simpleEndPageTag>--%>
<br/>
<br/>
<!--tld文件标签属性rtexprvalue为true时,属性表达式写法嵌套java代码如,count="<%=2+3%>"-->
<sdt:simpleTagAttr count="5">属性标签体循环<br/></sdt:simpleTagAttr>
<h6>---------------------------------------------</h6>

<div>
    <h1>自定义标签下面内容</h1>
</div>
</body>
</html>

JSPDemo

2)、标签属性是复合数据类型Date

package TagDemo;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.SimpleTagSupport;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;

public class SimpleTagWithAttrDemo2 extends SimpleTagSupport {

    private Date date;

    public void setDate(Date date) {
        this.date = date;
    }

    @Override
    public void doTag() throws JspException, IOException {
        PageContext pageContext = (PageContext) this.getJspContext();
        DateFormat format=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        pageContext.getOut().write(format.format(date));
    }
}

Date属性自定义标签处理器类

<?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/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
        version="2.0">
    <description>自定义标签</description>

    <tlib-version>1.0</tlib-version>

    <short-name>SDT</short-name>

    <uri>/sefDefineTag</uri>
    <tag>
        <name>tagDemo</name>
        <tag-class>TagDemo.TagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <description>测试循环</description>
        <name>iteration</name>
        <tag-class>TagDemo.IterationTagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <description>测试修改标签体内容</description>
        <name>bodytag</name>
        <tag-class>TagDemo.BodyTagDemo</tag-class>
        <body-content>JSP</body-content>
    </tag>
    <tag>
        <name>simpleTag</name>
        <tag-class>TagDemo.SimpleTagDemo</tag-class>
        <!--简单标签中,body-content中一般设置成empty或scriptless,如果设置成JSP会抛异常;
        传统标签中,body-content中一般设置成empty或JSP;
        如果body-content设置成tagdependent,那么标签体里的内容是给标签处理类使用的,
        例如:标签体里的SQL语句,就可以设置成tagdependent,标签处理器类得到SQL语句处理-->
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleIterationTag</name>
        <tag-class>TagDemo.SimpleIterationTagDemo</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleBodyTag</name>
        <tag-class>TagDemo.SimpleBodyTagDemo</tag-class>
        <body-content>scriptless</body-content>
    </tag>
    <tag>
        <name>simpleEndPageTag</name>
        <tag-class>TagDemo.SimpleEndPageTagDemo</tag-class>
        <body-content>empty</body-content>
    </tag>
    <tag>
        <name>simpleTagAttr</name>
        <tag-class>TagDemo.SimpleTagWithAttrDemo</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <description>标签处理器类count属性值</description>
            <name>count</name>
            <required>true</required>
            <!--rtexprvalue用来指示属性值是否可以是一个表达式-->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
    <tag>
        <name>simpleTagAttr2</name>
        <tag-class>TagDemo.SimpleTagWithAttrDemo2</tag-class>
        <body-content>scriptless</body-content>
        <attribute>
            <name>date</name>
            <required>true</required>
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>
</taglib>

tld文件

<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="sdt" uri="/sefDefineTag" %>
<html>
<head>
    <title></title>
</head>
<body>
<h1>下面是自定义标签:</h1>
<h6>---------------------------------------------</h6>

<sdt:tagDemo><%="java代码"%>标签体</sdt:tagDemo>
<br/>
<br/>
<sdt:iteration>循环标签体5次<br/></sdt:iteration>
<br/>
<br/>
<sdt:bodytag>abc</sdt:bodytag>
<br/>
<br/>
<sdt:simpleTag>简单标签体</sdt:simpleTag>
<br/>
<br/>
<sdt:simpleIterationTag>简单标签体循环5次<br/></sdt:simpleIterationTag>
<br/>
<br/>
<sdt:simpleBodyTag>abccde</sdt:simpleBodyTag>
<br/>
<br/>
<%--<sdt:simpleEndPageTag></sdt:simpleEndPageTag>--%>
<br/>
<br/>
<!--tld文件标签属性rtexprvalue为true时,属性表达式写法嵌套java代码如,count="<%=2+3%>"-->
<sdt:simpleTagAttr count="5">属性标签体循环<br/></sdt:simpleTagAttr>
<br/>
<br/>
<%
    Date now = new Date();
    request.setAttribute("date", now);
%>
<sdt:simpleTagAttr2 date="${date}"></sdt:simpleTagAttr2>
<br/>
<%--或者这样写:--%>
<sdt:simpleTagAttr2 date="<%=new Date()%>"></sdt:simpleTagAttr2>
<h6>---------------------------------------------</h6>

<div>
    <h1>自定义标签下面内容</h1>
</div>
</body>
</html>

JSPDemo

时间: 2024-11-05 04:48:08

JSP简单标签带属性开发的相关文章

javaweb学习总结(二十六)——jsp简单标签标签库开发(二)

一.JspFragment类介绍 javax.servlet.jsp.tagext.JspFragment类是在JSP2.0中定义的,它的实例对象代表JSP页面中的一段符合JSP语法规范的JSP片段,这段JSP片段中不能包含JSP脚本元素. WEB容器在处理简单标签的标签体时,会把标签体内容用一个JspFragment对象表示,并调用标签处理器对象的setJspBody方法把JspFragment对象传递给标签处理器对象.JspFragment类中只定义了两个方法,如下所示: getJspCon

JSP简单练习-JSP动作指令

JSP动作指令在JSP程序设计中经常会用到,与JSP指令不同,它将影响JSP运行是的功能! 1.include动作指令: include动作指令用来在JSP页面中动态包含一个文件,这样包含页面程序与被包含页面的程序是彼此独立的,互不影响.JSP的include动作指令可包含一个动态文件也可以包含一个静态文件.如果包含的是一个静态文件(如一个文本文件),就直接输出给客户端,由客户端的浏览器负责显示,如果包含的是一个动态文件,则由服务器的JSP引擎负责执行,再把运行结果返回给客户端显示出来. 注意:

JSP简单介绍

JSP JSP–Java Server Pages,和servlet技术一样,都是SUN公司定义的一种用于开发动态的web资源的技术. JSP技术最大的特点在于:写JSP就像在写html,但它相比html而言,html只能为用户提供静态数据,而JSP技术允许在页面中嵌套java代码,为用户提供动态的数据. JSP原理 浏览器访问JSP页面时,Web服务器时如何调用并执行一个JSP页面的? Web服务器在执行JSP页面时,是如何把JSP页面中的html排版标签是如何执行的? JSP页面中的java

JSP简单练习-JSP指令

一.page指令: 定义JSP页面的全局属性值时可使用page指令,一般把它放在页面的首部.如: <%@ page contentType="text/html; charset=gb2312" %> 注意:page指令中的contentType属性不能在同一个页面中被两次指定值. page指令的属性比较多,用方括号"[]"括起来的属性表示可选属性. 1.language: language定义页面使用的脚本语言,默认情况下值为java,因此在编写JSP

JSP简单练习-javaBean的简单应用

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

简单的iOS开发实例

项目需求 写一个iPhone应用程序,要求可以输入名字,点击按钮后,会显示一段文字向输入的名字打招呼,例如输入“宝玉”,显示“你好,宝玉!” 需求分析 这是一个很简单的应用程序,包含一个文本输入框,一个文本显示框,一个按钮.输入名字到文本输入框,再点击按钮,这时文本显示框的文字就会变成“你 好,<名字>!”.但是要注意,如果用户输入为空,要有警告提示用户重新输入:如果用户输入文字太长,超过16个字符,要自动截断. 产品设计 根据项目需求,画出相应的产品原型图: 初始状态 初始时,文本输入框为空

JSP简单练习-省略显示长字符串

<%@ page contentType="text/html; charset=gb2312" %> <!-- JSP指令标签 --> <%@ page import="java.util.*" %> <!-- JSP指令标签 --> <html> <head> <title>长字符串截取示例</title> </head> <body> <

JSP简单练习-EL表达式操作JavaBean

/* * javaBean代码 */ package bean; public class Box { double length; double width; double height; public Box() { length=0; width=0; height=0; } public double getLength() { return length; } public void setLength(double length) { this.length = length; }

JSP简单练习-包装类综合应用实例

<%@ page contentType="text/html; charset=gb2312" %><!-- JSP指令标签 --> <%@ page import="java.util.*" %> <!-- JSP指令标签 --> <html> <!-- html标记符 --> <body> <% // 以下为java程序片 boolean booleanTemp=true