Вероятно, самый простой способ - использовать стандартные существующие теги из jstl / sql и создать простой файл тегов вместо класса тегов:
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@attribute name="table" required="true"%>
<sql:query var="temporary">
select * from ${table}
</sql:query>
<table border="1">
<tr>
<c:forEach items="${temporary.columnNames}" var="temporary_value">
<th>${temporary_value}</th>
</c:forEach>
</tr>
<c:forEach items="${temporary.rowsByIndex}" var="temporary_row">
<tr>
<c:forEach items="${temporary_row}" var="temporary_value">
<td>${temporary_value}</td>
</c:forEach>
</tr>
</c:forEach>
</table>
Если вы поместите код в теги WEB-INF /, например, в dbtable.tag, вы можете использовать его следующим образом:
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<sql:setDataSource dataSource="jdbc/mydb" scope="request" />
<tags:dbtable table="customers"/>
Ссылка на базу данных должна быть сделана в web.xml, и у вас должны быть стандартные JSTL-файлы в вашем пути к классам.
Обратите внимание, что построение sql, как это, требует постоянного внимания, чтобы не допустить внедрения sql.
В вашем дизайне существует большое напряжение между:
- статическая типизация, ориентация объекта и наслоение - отображаются с помощью Spring / daos / JPA
- архитектура модели 1, плоский (в отличие от многоуровневого) дизайн, смешивание HTML с логикой - отображается при желании создавать запросы по запросу, отображать «записи» (в отличие от «создания графа объекта»), размещать бизнес-запросы в шаблоне HTML и т. д.
Оба подхода хороши (зависит от проблем, которые вы пытаетесь решить, и от масштаба вашего приложения), но они действительно плохо сочетаются. Прямо сейчас кажется, что вы получаете недостатки обоих подходов и преимущества ни одного.
Я бы порекомендовал вам либо:
- отбросьте Spring и daos и используйте чистый jstl / sql; это сделает ваше приложение простым тонким слоем вокруг вашей базы данных; вы можете использовать представления и хранимые процедуры для инкапсуляции реальной логики; многие крупные приложения работают именно так, особенно те, которые написаны людьми с сильными навыками работы с базами данных.
- отбросьте идею "волшебный табличный тег"; создайте набор javabeans, которые не являются универсальными для всех, но приспособлены для конкретных задач. Внедрите их Spring, используйте daos, декларативное разграничение транзакций и т. Д. Это сделает ваш код намного длиннее и менее универсальным, но (если все сделано правильно) будет легче поддерживать в последующие годы.