实现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 ,效果如下:
热门评论
自定义标签能判断吗?像if else那样