Отображение таблицы JSP с использованием JSTL при выполнении итерации нескольких объектов - PullRequest
0 голосов
/ 16 февраля 2019

Я на самом деле все еще начинаю в этом java ee, и мне все же удалось довольно далеко продвинуться.

Я постараюсь объяснить свою проблему самым простым способом, который я могу терпеть со мной ..:)

Я использую свой сервлет MajTablesController.java для получения информации об объекте (имя, ссылка и т. Д.) Из нескольких объектов [Цель состоит в том, чтобы показать таблицу, которая собирает всю эту информацию в один объект]

Используя тот же сервлет, я отправляю список в качестве атрибута сеанса с именем «Resultat», который содержит в себе список различных объектов, упомянутых ранее.

Итак, чтобы подвести итог, My List Resultat (которыйполучен моим JSP) содержит 4 объекта ListObject.

Проблема заключается в том, что при создании таблицы мне нужно использовать несколько циклов для извлечения данных из различных объектов, независимо от того, как я размещаю теги forEach,Мне не удается правильно составить таблицу (см. фото), и в итоге я получаю всю информацию в одну строку или один столбец ...

Чтобы помочь вамвизуализируйте более ясно, что происходит, вот пример того, что я получаю с этим кодом:

Код:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.estia.tai.UsersBeanModel"%>
<%@ page import="com.estia.tai.EchantillonBeanModel"%>

<%@ page import="java.sql.*"%>
<%@ page import="com.estia.tai.BDDConnect"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"                 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<link rel="stylesheet" type="text/css" media="screen"
href="../css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" media="screen"
    href="../css/styles.css">
    <script src="../js/scripts.js"></script>
    <script src="https://code.jquery.com/jquery-1.10.2.js"
        type="text/javascript"></script>
    <link rel="stylesheet"
        href="https://unpkg.com/bootstrap-table@1.13.4/dist/bootstrap-table.min.css">
        <script
            src="https://unpkg.com/bootstrap-table@1.13.4/dist/bootstrap-table.min.js"></script>
        <head>
        </head>
        <div class="container-fluid">
            <div class="col-md-12">
                <div class="table-responsive table-dark" id="preptable">

                    <table class="table table-bordered table-hover text-center"
                        data-toggle="" data-search="false" data-filter-control="true"
                        data-show-export="true" data-click-to-select="true">
                        <thead>
                            <tr class="">
                                <th data-field=id data-filter-control="select"
                                    data-sortable="true">Id Commande</th>
                                <th data-field=echantillons data-filter-control="select"
                                    data-sortable="true">Echantillons</th>
                                <th data-field=conditionnement data-filter-control="select"
                                    data-sortable="true">Conditionnement</th>
                                <th data-field=transporteur data-filter-control="select"
                                    data-sortable="true">Transporteur</th>
                                <th data-field=etat data-filter-control="select"
                                    data-sortable="true">Etat</th>
                                <th data-field=date data-filter-control="select"
                                    data-sortable="true">Date</th>
                                <th data-field=client data-filter-control="select"
                                    data-sortable="true">Clientss</th>
                            </tr>

                        </thead>







                        <tbody>
                            <c:forEach items="${Resultat}" var="variable">

                                <tr>
                                    <td><a href="../CommandeVueController?id=${variable.id}">${variable.id}</a></td>
                                    <td>${variable.echantillonRef}</td>
                                    <td>${variable.conditionnement}</td>
                                    <td><a
                                        href="../TransporteurVueController?id=${variable.transporteurId}">${variable.transporteur}</a></td>
                                    <td>${variable.etat}</td>
                                    <td>${variable.date}</td>
                                    <td>${variable.client}</td>



                                </tr>
                            </c:forEach>


                        </tbody>


                    </table>
                </div>
                <!--end of .table-responsive-->

                <script>
                    var $table = $('#preptable');
                    $(function() {
                        $('#toolbar').find('select').change(function() {
                            $table.bootstrapTable('refreshOptions', {
                                exportDataType : $(this).val()
                            });
                        });
                    })

                    var trBoldBlue = $("preptable");

                    $(trBoldBlue).on("click", "tr", function() {
                        $(this).toggleClass("bold-blue");
                    });

                    $(document)
                            .ready(
                                    function() {
                                        td_array = document
                                                .getElementsByTagName("td");
                                        check_prep = "En preparation";

                                        for (i = 0; i < td_array.length; i++) {

                                            if (td_array[i].textContent == check_prep) {
                                                td_array[i].style.backgroundColor = "#FF8C00";
                                            }
                                            ;
                                        }
                                        ;
                                    });
                </script>
            </div>
        </div>

TablePrep.jsp Что он на самом деле показывает: https://screenshotscdn.firefoxusercontent.com/images/2e48ceaf-3cd6-422a-a21c-b01d215b5d0e.png

Цель состоит в том, чтобы каждый элемент списка ниже имел свою собственную строку (точно так же, как таблица)

Обратите внимание, что методы prepTable (которые собирают и координируют информацию из другихобъекты) отправляет списки в их методах получения, что объясняет, почему у нас есть списки в таблице.

! ServletSide

          BDDConnect connexionBDDModele = new BDDConnect();
        Connection connection = connexionBDDModele.getConnexion();

    List<PrepTableVueModel> prepTableList = new     ArrayList<PrepTableVueModel>();
    int TransporteurId = 0;


    if (request.getSession().getAttribute("p") == "p") {


        PrepTableVueModel prepTable = new PrepTableVueModel();




        //request.getSession().setAttribute("commandeResultat", CommandeDAOModel.lireList());
        //request.getSession().setAttribute("echantillonResultat", EchantillonDAOModel.lireListe());
        //request.getSession().setAttribute("conditionnementResultat", ConditionnementDAOModel.lireListe());
        //request.getSession().setAttribute("clientResultat", ClientDAOModel.lireListe());
        //request.getSession().setAttribute("transporteurResultat", TransporteurDAOModel.lireListe());


        prepTable.addCommande(CommandeDAOModel.lireList());
        for (int i = 0 ; i < CommandeDAOModel.lireList().size(); i++) {

            prepTable.addEchantillon(EchantillonDAOModel.lireListeEch(CommandeDAOModel.lireList().get(i).getId()));

        }

        for (int i = 0 ; i< prepTable.EchantillonList.size(); i++) {

            prepTable.addEchantillonRef(EchantillonDAOModel.lireListeEchFinal(prepTable.EchantillonList.get(i)));

        }

        for (int i =0; i < prepTable.EchantillonListRef.size(); i++) {


        }

        //prepTable.addConditionnement(ConditionnementDAOModel.lireListe());
        //prepTable.addClient(ClientDAOModel.lireListe());
        //prepTable.addTransporteur(TransporteurDAOModel.lireListe());

        System.out.println(prepTable.getId() + "id dans le maj ");
        System.out.println(prepTable.getEchantillon() + "ech dans le maj ");


        prepTableList.add(prepTable);


        request.getSession().setAttribute("Resultat", prepTableList);

        request.getRequestDispatcher("/panel/tableprep.jsp").forward(request, response);

Я пытался вместо того, чтобы возвращать списки элементов из PrepTable,вернуть отдельные элементы, но безуспешно ..

1 Ответ

0 голосов
/ 17 февраля 2019

Мне удалось сделать это правильно. Уловка была в том, чтобы отправить дополнительный строковый атрибут на страницу JSP, указывающий количество элементов, которые у меня были (для настройки цикла). Код становится:

Цитата

<tbody>
                            <c:forEach begin="0" end="${ResultNumberCom}" varStatus="loop">
                                <c:forEach items="${Resultat}" var="variable">

                                    <tr>
                                        <td><a href="../CommandeVueController?id=${variable.id[loop.index]}">${variable.id[loop.index]}</a></td>
                                        <td>${variable.echantillonRef[loop.index]}</td>
                                        <td>${variable.conditionnement[loop.index]}</td>
                                        <td><a
                                            href="../TransporteurVueController?id=${variable.transporteurId[loop.index]}">${variable.transporteur[loop.index]}</a></td>
                                        <td>${variable.etat[loop.index]}</td>
                                        <td>${variable.date}[loop.index]</td>
                                        <td>${variable.client}</td>



                                    </tr>
                                </c:forEach>
                            </c:forEach>
...