【问题标题】:How do I make a list of DB data from jsp and print it out?如何从 jsp 制作数据库数据列表并打印出来?
【发布时间】:2019-07-12 05:32:36
【问题描述】:

我正处于web开发的起步阶段。

我可以得到DBdata,但我不确定如何将其打印为列表

我正在打印这个表格列表

        SELECT
        seq_no,
        type_big_category,
        body,
        status
        FROM DB_TABLE;

列表输出在js文件中运行。

$(function() {

    $.ajax({
        url : "/dblistdata",
        type : "GET",
        dataType : "json",
        data: data,
        timeout: 10000
    }).done(function (result) {
        if(result.resultCode == "S000"){
            for (var i = 0; i < result.length; i++) {
                var tableBody =  '<tr>'
                        + '<td>' + result.messagelist[i].type_big_category + '</td>'
                        + '<td>' + result.messagelist[i].type_mid_category + '</td>'
                        + '<td>'
                        + '<label class="checkbox" for="checkbox' + i + '">'
                        + '<input type="checkbox" name="checkbox" id="checkbox' + i + '" checked="checked" />'
                        + '</label>'
                        + '</td>'
                        + '<td>'
                        +   '<textarea class="form-control push-text">"' + result.messagelist[i].body + '"</textarea>'
                        + '</td>'
                        + '<td>'
                        +   '<button type="button" class="btn btn-primary">save</button>'
                        +   '<button type="button" class="btn btn-default" id="deletebutton'+ i + '">delete</button>'
                        + '</td>'
                        + '</tr>';

                $('#tbody').append(tableBody);
                var btn[i] = document.getElementById('deletebutton[i]');
                btn[i].disabled = 'disabled';
            }
        }else{
            alert(result.resultMsg);
        }
    }).fail(function (jqXHR, textStatus, errorThrown) {
        console.log(errorThrown);
    })

});

而且我必须在 jsp 文件中显示列表。

<form class="smart-form">
    <table class="tb-regist" id="eeMsg">
        <thead>
            <tr>
                <th>Sortation</th>
                <th>situation</th>
                <th>check</th>
                <th colspan="2">message</th>
            </tr>
        </thead>
        <tbody id="tbody">

        </tbody>
    </table>
</form>

必须以这种方式输出。你如何打印出来?请多多帮助。

【问题讨论】:

    标签: javascript java mysql spring


    【解决方案1】:

    我看到您正在使用 Java,所以您可能正在使用类似 servlet 的请求处理器。所以你至少有两种方法来表达你的观点,第三种只是我发现有用的建议:

    • 将列表添加为 JSP 请求的属性并使用 JSTL
    • 使用异步 javascript 请求(即 fetch 或 XHR)获取您的列表
    • 使用第三方库(如 Boostrap-tables)

    将列表添加为 JSP 请求的属性并使用 JSTL

    Servlet

    将您的列表添加到请求属性中。

    public void doGet( // or doPost
        HttpServletRequest req, 
        HttpServletResponse res
    ) throws ServletException, IOException  {
        List<Object> myList = new ArrayList<>();
        req.setAttribute("myList", myList);
    }
    

    JSP

    使用 JSTL 遍历您的列表,并为表格的每一行的每个单元格调用您想要的任何对象属性。

    <form class="smart-form">
        <table class="tb-regist" id="eeMsg">
            <thead>
                <tr>
                    <th>Sortation</th>
                    <th>situation</th>
                    <th>check</th>
                    <th colspan="2">message</th>
                </tr>
            </thead>
            <tbody>
                <c:forEach items="${ myList }" var="object">
                    <tr>
                        <td>${ object.seq_no }</td>
                        <td>${ object.type_big_category }</td>
                        <td>
                            <label class="checkbox" for="checkbox01">
                                <input type="checkbox" 
                                       name="checkbox" 
                                       id="checkbox01" 
                                       checked="checked" />
                                <i/>
                            </label>
                        </td>
                        <td>
                            <textarea class="form-control push-text">body</textarea>
                        </td>
                        <td>
                            <button type="button" 
                                    class="btn btn-primary">
                                save
                            </button>
                            <button type="button" 
                                    class="btn btn-default"
                                    id='deletebutton'>
                                delete
                            </button>
                        </td>
                    </tr>
                </c:forEach>
            </tbody>
        </table>
    </form>
    

    不要忘记 JSTL 声明!

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    

    使用异步 javascript 请求(即 fetch 或 XHR)获取您的列表

    Servlet

    将您的列表添加到请求属性,但作为 JSON 格式,您可以使用来自 org.json 库的 org.json.JSONArray

    public void doPost( // or doGet
        HttpServletRequest req, 
        HttpServletResponse res
    ) throws ServletException, IOException  {
        List<Object> myList = new ArrayList<>();
        JSONArray jsonArray = new JSONArray(myList);
        res.setContentType("application/json");
        res.getWriter().print(jsonArray);
        res.getWriter().flush();
        res.getWriter().close();
        res.flushBuffer();
    }
    

    JSP

    只是静态 HTML,表格将使用 javascript 构建。

    <form class="smart-form">
        <table class="tb-regist" id="eeMsg">
            <thead>
                <tr>
                    <th>Sortation</th>
                    <th>situation</th>
                    <th>check</th>
                    <th colspan="2">message</th>
                </tr>
            </thead>
        </table>
    </form>
    

    Javascript

    将您的响应解析为 JSON 并迭代以使用 HTMLTableElement 构建您的表。

    // XHR post function
    var sendXHRPost = void 0;
    {
        sendXHRPost = function (url, params, callback) {
            var http = new XMLHttpRequest();
            http.open('POST', url, true);
            http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            http.onreadystatechange = function() {
                if (http.readyState === 4) {
                    callback(http.status, http.responseText);
                }
            }
            http.send(params);
        }
    }
    // get your table data
    var fetchTableData = void 0;
    {
        fetchTableData = function () {
            sendXHRPost(
                'myURL', 
                // maybe you don't pass parameters to fetch your table?
                'parameterName=parameterValue', 
                function (responseStatus, responseText) {
                    makeTable(responseStatus, JSON.parse(responseText);
                }
            );
        }
    }
    // formatter for your textarea cell
    var textAreaCellFormatter = void 0;
    {
        textAreaCellFormatter = function (rowId) {
            return '<textarea class="form-control push-text">'
                + rowId 
                + '</textarea>';
        }
    }
    // formatter for your buttons cell
    var buttonsCellFormatter = void 0;
    {
        buttonsCellFormatter = function (rowId) { 
            return  '<button type="button" '
                + 'class="btn btn-primary">'
                + 'save'
                + '</button>'
                + '<button type="button" '
                + 'class="btn btn-default" '
                + 'id="deletebutton'+rowId+'">'
                + 'delete'
                + '</button>';
        }
    }
    // build your table
    var makeTable = void 0;
    {
        makeTable = function (status, jsonResponse) {
            var table = document.getElementById("eeMsg");
            // Delete table content in case it was already loaded
            for (var i = 1 ; i < table.rows.length ; i++) {
                table.deleteRow(i); 
            }
            for (var i = 0 ; i < table.tBodies.length ; i++) {
                table.removeChild(table.tBodies[i]); 
            }
            // Create tbody
            var tBody = table.createTBody();
            // Handle internal server error
            if (status != 200) {
                var row = tBody.insertRow();
                var cell = row.insertCell(0);
                cell.colSpan = "4";
                cell.innerHTML = "Error while fetching data.";
            }
            // Handle no data found
            else if (jsonResponse.length === 0) {
                var row = tBody.insertRow();
                var cell = row.insertCell(0);
                cell.colSpan = "4";
                cell.innerHTML = "No data found.";
            }
            // All fine, build your table
            else {
                for(var i = 0 ; i < jsonResponse.length ; i++) {
                    var row = tBody.insertRow();
                    row.insertCell(0).innerHTML = jsonResponse[i].seq_no;
                    row.insertCell(1).innerHTML = jsonResponse[i].type_big_category;
                    row.insertCell(2).innerHTML = textAreaCellFormatter(i);
                    row.insertCell(3).innerHTML = buttonsCellFormatter(i);
                }
            }
        }
    }
    // Execute your function on page loading.
    (function () { fetchTableData(); })();
    

    使用第三方库(如Boostrap-tables

    Servlet

    上面也一样。

    JSP

    <!-- libs and css -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.15.2/dist/bootstrap-table.min.css">
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js"></script>
    <script src="https://unpkg.com/bootstrap-table@1.15.2/dist/bootstrap-table.min.js"></script>
    <!-- your table in your body, not builded yet -->
    <table id="eeMsg"
           data-toolbar="#toolbar"
           data-toggle="table"
           data-pagination="true"
           data-search="true"
           data-url="yourFetchURLWithJSONResponse">
        <thead>
            <tr>
                <th data-field="seq_no">Sortation</th>
                <th data-field="type_big_category">situation</th>
                <th>check</th>
                <th colspan="2">message</th>
            </tr>
        </thead>
    </table>
    

    【讨论】:

    • 当使用 bootstrap 看起来很简单时,如何在 javascript 中进行设置?
    • 只需从 bootstrap-table 导入 javascripts 文件和 css 并为您的表设置 data-url 和其他数据集属性,如上例所示。导入的 bootstrap-tables javascript 将为您做菜!即&lt;table id="eeMsg" data-toolbar="#toolbar" data-toggle="table" data-pagination="true" data-search="true" data-url="dblistdata"&gt;&lt;!-- your table headers here --&gt;&lt;table&gt;
    • 这是什么意思? Your table heads here
    • 对不起,我不明白,因为我正在开始网页。
    • 这意味着你必须在这里写你的标题,因为我没有写它,因为 cmets 空间不足。就像你的例子一样:&lt;thead&gt; &lt;tr&gt; &lt;th&gt;Sortation&lt;/th&gt; &lt;th&gt;situation&lt;/th&gt; &lt;th&gt;check&lt;/th&gt; &lt;th colspan="2"&gt;message&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt;
    【解决方案2】:

    您可以使用 for 循环将数据提取到表中。您的ajax 代码应如下所示。获得所有结果后,它将显示在您的表格中。

    $(function() {
        $.ajax({
            url : "/dblistdata",
            type : "GET",
            dataType : "json",
            success : function(result) {
                console.log(result);
    
                for (var i = 0; i < result.length; i++) {
                    var tableBody = "
                        <tr>
                            <td>" + result[i].seq_no + "</td>
                            <td>" + result[i].type_big_category + "</td>
                            <td>
                                <label class="checkbox" for="checkbox01">
                                <input type="checkbox" name="checkbox" id="checkbox01" checked="checked" />
                                </label>
                            </td>
                            <td>
                                <textarea class="form-control push-text">" + result[i].body + "</textarea>
                            </td>
                            <td>
                                <button type="button" class="btn btn-primary">save</button>
                                <button type="button" class="btn btn-default" id="deletebutton">dlete</button>
                            </td>
                        </tr>
                    ";
    
                    $('#tbody').append(tableBody);
                }
            }
        })
    });
    

    你的HTML代码应该是这样的,

    <form class="smart-form">
        <table class="tb-regist" id="eeMsg">
            <thead>
                <tr>
                    <th>Sortation</th>
                    <th>situation</th>
                    <th>check</th>
                    <th colspan="2">message</th>
                </tr>
            </thead>
            <tbody id="tbody">
    
            </tbody>
        </table>
    </form>
    

    我假设您使用的是JQuery。但如果不加JQuery

    【讨论】:

    • 我有错误 Uncaught SyntaxError: Invalid or unexpected token 行是 var= tableBody = " 我更新了问题
    • 我用字符串解决了这个错误,但是看不到数据。是什么原因?您的问题已更新。
    • @helpmesolution 这个怎么样? resultCode ?你能发布即将到来的结果吗?
    • 我可以带。进有条件的门,我也能拿到这个价格。 result.messagelist[0].type_big_category
    • 你能把结果贴在这里吗?我需要检查一下。
    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2017-08-02
    • 2019-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    相关资源
    最近更新 更多