Несколько элементов в ячейке таблицы

#java #html #database #web #thymeleaf

#Ява #HTML #База данных #сеть #тимелиаф

Вопрос:

Я использую thymeleaf для разработки веб-сайта, и до сих пор он отлично работал для меня, однако, когда я хочу представить несколько элементов в одной таблице, вместо этого он добавит дополнительные отдельные ячейки в строку, в которой существуют значения. До сих пор у меня нет решения этой проблемы, и если кто-нибудь еще может увидеть, чего мне не хватает, я был бы очень признателен.

Заранее спасибо!

Код(ОТРЕДАКТИРОВАН)

Здесь я сначала проверяю, есть ли обработчики(в базе данных), затем помещаю их все в список, используя foreach, но у меня нет возможности поместить все элементы в одну ячейку(или данные таблицы, представленные здесь тегом ). Я поместил логику внутри тега, которая работала довольно хорошо, однако строки без данных получают дополнительные ячейки, как на рисунке ниже.

 lt;td gt; th:if="${place.getHandler} != null" th:each="handlerList : ${place.getHandler}" th:text="${handlerList.name}"gt;lt;/tdgt;  

Новый Код

 lt;tdgt; lt;span th:if="${place.getHandler} != null" th:each="handlerList : ${place.getHandler}" th:text="${handlerList.name}"gt;lt;/spangt;lt;/tdgt;  

введите описание изображения здесь

Весь код

 lt;!DOCTYPE htmlgt; lt;html xmlns:th="http://www.thymeleaf.org" class="has-navbar-fixed-top"gt; lt;head th:replace="common_fragments/header :: header"gt;  lt;meta charset="utf-8"gt;  lt;link rel="stylesheet" href="../../../../public/css/font-awesome.min.css"/gt;  lt;link rel="stylesheet" href="../../../../public/css/bulma_custom.min.css"/gt; lt;/headgt; lt;bodygt;  lt;div id="navbar-top"gt;  lt;nav th:replace="logged_in/admin/fragments/navbar :: nav"gt;lt;/navgt; lt;/divgt; lt;maingt;  lt;section class="section"gt;  lt;div class="container"gt;  lt;h1 class="title"gt;  matchade studenter  lt;/h1gt;  lt;hrgt;  lt;div class="content is-medium"gt;  lt;table id="table" class="table is-bordered is-narrow is-hoverable"gt;  lt;theadgt;  lt;trgt;  lt;thgt;Studentlt;/thgt;  lt;thgt;Student emaillt;/thgt;  lt;thgt;Student mobilnummerlt;/thgt;  lt;thgt;Enhetlt;/thgt;  lt;thgt;Handledarelt;/thgt;  lt;thgt;Handledare emaillt;/thgt;  lt;thgt;Handledare mobilnummerlt;/thgt;  lt;/trgt;  lt;/theadgt;  lt;tbodygt;  lt;tr th:each="place : ${places}"gt;  lt;td th:text="${place.student.studentData.name}"gt;lt;/tdgt;  lt;td th:text="${place.student.studentData.email}"gt;lt;/tdgt;  lt;td th:if="${place.student.studentData.phoneNumber} != ''" th:text="${place.student.studentData.phoneNumber}"gt;lt;/tdgt;   lt;td th:if="${place.student.studentData.phoneNumber} == ''" gt;  lt;p class="icon has-text-danger"gt;  lt;i class="fa fa-lg fa-times"gt;lt;/igt;  lt;/pgt;   lt;/tdgt;     lt;td th:text="|${place.unit.name} (Regioner: ${place.unit.municipality.getRegionNamesString}, Kommuner: ${place.unit.municipality.name})|"gt;lt;/tdgt;   lt;tdgt; lt;span th:if="${place.getHandledare} != null" th:each="handledareList : ${place.getHandledare}" th:text="${handledareList.name}"gt;lt;/spangt;lt;/tdgt;  lt;td th:if="${place.getHandledare} != null" th:text="${place.getHandledare[0].email}"gt;lt;/tdgt;    lt;td th:if="${place.getHandledare} == null"gt;  lt;p class="icon has-text-danger"gt;  lt;i class="fa fa-lg fa-times"gt;lt;/igt;  lt;/pgt;  lt;/tdgt;   lt;td th:if="${place.getHandledare} == null"gt;  lt;p class="icon has-text-danger"gt;  lt;i class="fa fa-lg fa-times"gt;lt;/igt;  lt;/pgt;  lt;/tdgt;    lt;div th:if="${place.getHandledare} != null"gt;  lt;td th:if="${place.getHandledare[0].phoneNumber} != ''" th:text="${place.getHandledare[0].phoneNumber}"gt;lt;/tdgt;  lt;/divgt;   lt;div th:if="${place.getHandledare} == null"gt;  lt;td gt;  lt;p class="icon has-text-danger"gt;  lt;i class="fa fa-lg fa-times"gt;lt;/igt;  lt;/pgt;   lt;/tdgt;  lt;/divgt;   lt;div th:if="${place.getHandledare} != null"gt;  lt;td th:if="${place.getHandledare[0].phoneNumber} == '' "gt;   lt;p class="icon has-text-danger"gt;  lt;i class="fa fa-lg fa-times"gt;lt;/igt;  lt;/pgt;  lt;/tdgt;   lt;/tdgt;  lt;/divgt;     lt;/trgt;  lt;/tbodygt;   lt;/tablegt;  lt;brgt;  lt;button class="button is-large is-success" id="download-button"gt;ladda ner matchning resultatlt;/buttongt;  lt;brgt;  lt;brgt;   lt;/divgt;  lt;/divgt;  lt;/sectiongt; lt;/maingt;  lt;footer th:replace="common_fragments/footer :: footer"gt;lt;/footergt;     lt;scriptgt;  function htmlToCSV(html, filename) {  var data = [];  var rows = document.querySelectorAll("table tr");   for (var i = 0; i lt; rows.length; i  ) {  var row = [], cols = rows[i].querySelectorAll("td, th");   for (var j = 0; j lt; cols.length; j  ) {  row.push(cols[j].innerText);  }   data.push(row.join(";"));  }   downloadCSVFile(data.join("n"), filename);  } lt;/scriptgt;   lt;scriptgt;  function downloadCSVFile(csv, filename) {  var csv_file, download_link;   csv_file = new Blob(["uFEFF" csv], {type: "text/csv"});   download_link = document.createElement("a");   download_link.download = filename;   download_link.href = window.URL.createObjectURL(csv_file);   download_link.style.display = "none";   document.body.appendChild(download_link);   download_link.click();  } lt;/scriptgt;  lt;scriptgt;  document.getElementById("download-button").addEventListener("click", function () {  var html = document.querySelector("table").outerHTML;  htmlToCSV(html, "matchning.csv");  }); lt;/scriptgt;  lt;/bodygt; lt;/htmlgt;  

Ответ №1:

Вы можете переместить свою логику Thymeleaf из lt;tdgt; тега в тег внутри lt;tdgt; тега — например, lt;spangt; :

 lt;tdgt;  lt;span th:if="${place.getHandler} != null"   th:each="handlerList : ${place.getHandler}"   th:text="${handlerList.name}"gt;lt;/spangt; lt;/tdgt;  

Оттуда вы можете добавить любой CSS, который вам может понадобиться для форматирования промежутков.

Если у вас есть дополнительные lt;tdgt; ячейки, которые необходимо подавить, переместите th:if выражение внутрь lt;tdgt; тега:

 lt;td th:if="${place.getHandler} != null"gt;  lt;span th:each="handlerList : ${place.getHandler}"   th:text="${handlerList.name}"gt;lt;/spangt; lt;/tdgt;  

Комментарии:

1. Спасибо! Это сработало, но теперь я получаю дополнительные ячейки в строках, где мне не нужны данные в этом столбце, в основном столбец, который может содержать дополнительные данные в своих ячейках, добавляет дополнительные ячейки в строки, когда ячейки пусты.

2. Вам нужно будет показать, что вы имеете в виду, отредактировав свой вопрос (с кодом и данными) вместо описания проблемы или ее описания. Мне кажется , я понимаю, что вы описываете, но трудно быть уверенным без четкого примера. Возможно, вам просто нужно перейти th:if="${place.getHandler} != null" от lt;spangt; одного к lt;tdgt; другому — но, пожалуйста, покажите пример в вопросе, чтобы было ясно.

3. Моя ошибка в том, что я имел в виду, что следование вашему примеру с использованием span сработало, но вместо этого я получил дополнительные ячейки в строках без данных в ячейках, содержащих несколько элементов. Изображение добавлено выше.

4. Добавлен весь код.

5. Если вы видите if , что оператор отображается в вашей фактической таблице, то это звучит так, как будто вы не поместили этот код в lt;tdgt; открывающий тег. Я обновил свой ответ.