zoukankan      html  css  js  c++  java
  • jsp2自定义标签+属性

    前面说过jsp2自定义标签如果要加入属性需要设置属性的getter和setter方法。代码如下:

     1 public class GetParam extends SimpleTagSupport {
     2     private String driver;
     3     private String url;
     4     private String user;
     5     private String pwd;
     6     private String sql;
     7     private Connection conn = null;;
     8     private Statement stm = null;;
     9     private ResultSet rs = null;
    10 
    11     public void setDriver(String driver) {
    12         this.driver = driver;
    13     }
    14 
    15     public String getDriver() {
    16         return this.driver;
    17     }
    18 
    19     public String getUrl() {
    20         return url;
    21     }
    22 
    23     public void setUrl(String url) {
    24         this.url = url;
    25     }
    26 
    27     public String getUser() {
    28         return user;
    29     }
    30 
    31     public void setUser(String user) {
    32         this.user = user;
    33     }
    34 
    35     public String getPwd() {
    36         return pwd;
    37     }
    38 
    39     public void setPwd(String pwd) {
    40         this.pwd = pwd;
    41     }
    42 
    43     public String getSql() {
    44         return sql;
    45     }
    46 
    47     public void setSql(String sql) {
    48         this.sql = sql;
    49     }
    50 
    51     @Override
    52     public void doTag() throws JspException, IOException {
    53         // TODO Auto-generated method stub
    54         try {
    55             // 注册驱动
    56             Class.forName(driver);
    57             // 建立连接
    58             conn = DriverManager.getConnection(url, user, pwd);
    59             stm = conn.createStatement();
    60             rs = stm.executeQuery(sql);
    61             // 获取页面输出流
    62             Writer out = getJspContext().getOut();
    63             // 设置表格
    64             out.write("<table border='1' width='300'>");
    65             // 遍历
    66             while (rs.next()) {
    67                 out.write("<tr>");
    68                 for (int i = 1; i < rs.getMetaData().getColumnCount(); i++) {
    69                     out.write("<td>");
    70                     out.write(rs.getString(i));
    71                     out.write("</td>");
    72                 }
    73                 out.write("</tr>");
    74             }
    75             out.write("</table>");
    76 
    77         } catch (SQLException | ClassNotFoundException ex) {
    78 
    79             // TODO: handle exception
    80             ex.printStackTrace();
    81             throw new JspException("自定义标签错误" + ex.getMessage());
    82         } finally {
    83             try {
    84                 if (rs != null) {
    85                     rs.close();
    86                 }
    87                 if (stm != null) {
    88                     stm.close();
    89                 }
    90                 if (conn != null) {
    91                     conn.close();
    92                 }
    93             } catch (SQLException e) {
    94                 // TODO: handle exception
    95                 e.printStackTrace();
    96             }
    97         }
    98     }
    99 }

    接下来配置tld文件,对于有属性的标签,需要在<tag>元素下增加<attribute>子元素。在<attribute>下有三个元素,

    第一个是name:设置属性名,第二个是required:该属性是否为必须属性,第三个是fragment:该属性是否支持JSP脚本,表达式等动态内容。

    在配置<attribute>下面的name时候,一定要和属性名对应,不然会报错"Unable to find setter method for attribute: XXX",tld文件完整代码如下:

     1 <?xml version="1.0" encoding="GBK" ?>
     2 <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     3     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
     4     version="2.0">
     5     <!-- 描述 -->
     6     <description>A tag library exercising SimpleTag handlers.</description>
     7     <!-- 版本 -->
     8     <tlib-version>1.0</tlib-version>
     9     <!-- 短名 -->
    10     <short-name>gotparam</short-name>
    11     <!-- 指定标签库URI -->
    12     <uri>http://tomcat.apache.org/gotparam</uri>
    13     <tag>
    14         <description>Outputs Hello, World</description>
    15         <!-- 标签库名字 -->
    16         <name>GetParam</name>
    17         <!-- 标签处理类 -->
    18         <tag-class>lee.GetParam</tag-class>
    19         <!-- 标签体内容 -->
    20         <body-content>empty</body-content>
    21         <!-- 标签属性:driver -->
    22         <attribute>
    23             <name>driver</name>
    24             <required>true</required>
    25             <fragment>true</fragment>
    26         </attribute>
    27         <!-- 标签属性:url -->
    28         <attribute>
    29             <name>url</name>
    30             <required>true</required>
    31             <fragment>true</fragment>
    32         </attribute>
    33         <!-- 标签属性:user -->
    34         <attribute>
    35             <name>user</name>
    36             <required>true</required>
    37             <fragment>true</fragment>
    38         </attribute>
    39         <!-- 标签属性:pwd -->
    40         <attribute>
    41             <name>pwd</name>
    42             <required>true</required>
    43             <fragment>true</fragment>
    44         </attribute>
    45         <!-- 标签属性:sql -->
    46         <attribute>
    47             <name>sql</name>
    48             <required>true</required>
    49             <fragment>true</fragment>
    50         </attribute>
    51     </tag>
    52 </taglib>

    最后新建一个jsp文件测试标签,代码如下:

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ taglib uri="http://tomcat.apache.org/gotparam" prefix="gotparam"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>Insert title here</title>
     9 </head>
    10 <body>
    11     <gotparam:GetParam user="root" url="jdbc:mysql://localhost:3306/house"
    12         driver="com.mysql.jdbc.Driver" pwd="123456" sql="select * from house" />
    13 </body>
    14 </html>
  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/luoxiaozhao/p/6970736.html
Copyright © 2011-2022 走看看