86.如何将数据库中的CLOB格式输出到JSP页面

来源:互联网 发布:php验证账号密码 编辑:程序博客网 时间:2024/05/16 12:25

1.数据库字段存储的CLOB类型字段

2.实体Bean中是Object类型对应数据库CLOB字段

3.控制层发送到JSP页面为对象


首先编写ClobToString.java类

/**
 * File Name: ClobToString.java
 *
 * File Desc: 处理clob大对象类型
 *
 * Product AB: WEB_1_0_0
 *
 * Product Name: 网站
 *
 * Author: kan.jiang
 *
 * History: 2010-9-14 created by kan.jiang
 */
package com.saiyou.util;

import java.io.*;
import java.sql.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;

/**
 * 处理clob大对象类型
 *
 * @author DarrenMJ
 * @version 1.0
 * @date 2017-4-14 9:55:33
 */
public class ClobToString extends SimpleTagSupport {
    private Object clob;
    private int n;
    private String addContent;

    public String getAddContent() {
        return addContent;
    }

    public void setAddContent(String addContent) {
        this.addContent = addContent;
    }

    public int getN() {
        return n;
    }

    public void setN(int n) {
        this.n = n;
    }

    public Object getClob() {
        return clob;
    }

    public void setClob(Object clob) {
        this.clob = clob;
    }

    @Override
    public void doTag() throws JspException, IOException {
        JspContext jc = super.getJspContext();
        JspWriter out = jc.getOut();
        if (clob == null) {
            out.print("");
        }
        StringBuffer clobString = new StringBuffer();
        if (clob instanceof Clob) {
            int y;
            char ac[] = new char[4096];
            Reader reader;
            try {
                reader = ((Clob) clob).getCharacterStream();
                while ((y = reader.read(ac, 0, 4096)) != -1) {
                    clobString.append(new String(ac, 0, y));
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        } else {
            clobString.append(clob.toString());
        }
        if (clobString.toString().length() > n && n > 0) {
            out.print(clobString.toString().substring(0, n) + addContent);
        } else {
            out.print(clobString.toString());
        }
    }
}


其次编写ClobTag.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>自定义标签</description>
    <display-name>mytag</display-name>
    <tlib-version>1.0</tlib-version>
    <short-name>tag</short-name>
    <uri>http://myDefineTags.com/mytags</uri>
    <tag>
        <description>输出Colb对象</description>
        <name>colb</name>
        <tag-class>com.saiyou.util.ClobToString</tag-class>
        <body-content>empty</body-content>

        <attribute>
            <description>需要输出的Colb对象</description>
            <name>clob</name>
            <required>true</required>
            <!-- 必须出现 -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <description>字符串超过n的时候截取</description>
            <name>n</name>
            <required>true</required>
            <!-- 必须出现 -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
        <attribute>
            <description>追加内容</description>
            <name>addContent</name>
            <required>true</required>
            <!-- 必须出现 -->
            <rtexprvalue>true</rtexprvalue>
        </attribute>
    </tag>

</taglib>


需要注意的是,要对应的ClobToString.java文件所在路径(如图)

  <tag-class>com.saiyou.util.ClobToString</tag-class>

然后到JSP页面

<%@ page language="java" pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="p" uri="tld/ClobTag.tld"%>

。。。

 <div><p:colb clob="${item.description}" n="45" addContent="..."/></div>


要注意的是<%@taglib prefix="p" uri="tld/ClobTag.tld"%> 写你tld所在位置 ,如果不确定对不对,按住CTRL键 鼠标左键点一下,看能不不能点进去(如图)




1 0
原创粉丝点击