手记

实战练习之Jsp自定义标签

实现JSP自定义标签分以下几步:
1、完成自定义标签的方法(实现主要的业务逻辑)。
2、配置tld文件。
3、在jsp页面引用标签。


代码如下:
标签实现类UserInfoTag.java,继承TagSupport,重写doStartTag()方法。在该方法中实现主要的业务逻辑。

package org.springboot.tag;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.TagSupport;

public class UserInfoTag extends TagSupport{

    public User user = null; 

    @Override
    public int doStartTag() throws JspException{
        try{
              JspWriter out = this.pageContext.getOut();
              out.println("<h1>尊敬的用户 "+user.getUserName()+"您好!</h1>"); 

        }catch(Exception e){
             throw new JspException(e.getMessage());
        }

        return   SKIP_BODY;
    }

    public User getUser() {
        return user;
    } 

    public void setUser(User user) {
        this.user = user;
    } 

}

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

    <description>UUM JSP Form Tag Library</description>
    <tlib-version>1.0</tlib-version>
    <short-name>form</short-name>
    <uri>uum</uri><!-- 可以自定义  -->

        <tag>
        <name>userTag</name><!-- 标签名称  -->
        <tag-class>org.springboot.tag.UserInfoTag</tag-class><!-- 实现方法的位置  -->
        <body-content>empty</body-content>
        <attribute>
            <name>user</name><!-- 入参名称  -->
            <required>false</required><!-- 该入参是否必须  -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>  
        </tag> 
</taglib>

引用自定义标签的jsp文件 ,userTag.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib prefix="uum" uri="uum" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>自定义标签</title>
</head>
<body>

<uum:userTag user="${user}"   />  <!-- 变量名称和变量类型要和标签的实现方法中匹配 --> 
</body>
</html>

自定义标签的展示过程可以理解为,当浏览器解读该JSP页面时,到引用自定义标签的地方会根据标签的uri和标签名找到对应在tld中的实现方法,执行自定义标签的实现方法,就会看到最后的结果。
一般的WEB项目可以直接访问引用的jsp页面就可以看到效果,即http://localhost:8080/userTag.jsp
因为用的是springBoot框架,所以要增加一个截去请求的跳转方法,跳转到相应的jsp页面。
UserTagController.java

package org.springboot.simple.controller;

import java.io.IOException;  
import java.util.ArrayList;  
import org.springboot.tag.User; 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class PageController {
        @RequestMapping("/sayHello")//请求名称
    public ModelAndView userTag() {
       //跳转页面路径
         ModelAndView mav = new ModelAndView("/userTag");
        //定义参数
         User user = new User();
         user.setUserName("呦呦米");
        //将参数传到jsp页面
         mav.addObject("user", user);
        return mav;
    } 
}

还有一个用到的User.java实体,练习的时候可以不用实体,直接用字符串,在userTag.java中定义 String userName; 并生成get(),set()方法,更简单。

package org.springboot.tag;

public class User {
    public String userName;
    public String id;
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    } 
}

浏览器输入http://localhost:8080/sayHello ,效果如下:

5人推荐
随时随地看视频
慕课网APP

热门评论

自定义标签能判断吗?像if else那样

查看全部评论