【问题标题】:.jsp dynamic table creation.jsp 动态表创建
【发布时间】:2019-07-29 20:45:31
【问题描述】:

我正在尝试在.jsp 中创建一个动态表。我一直在尝试通过以下方式通过 scriptlet 做到这一点(这是伪代码):

<%
PrintWriter writer = response.getWriter();

writer.println("<table>");

while(records in request object){
    writer.println("<tr>" + request.getAttribute().toString() + "</tr>");
    }

writer.println("</table");
writer.close();
%>

虽然上述方法可以而且确实有效,但不鼓励这样做,并且可能不是完成这项任务的最佳方式。

我的观点和问题 - 有没有更好的方法来创建这样的动态内容?

【问题讨论】:

  • 是的,有。只需创建常规的 html 表。在里面,写下你的逻辑。如果您需要在表格中使用动态元素,只需创建常规 html 表格并在其中使用 foreach(JSTL 标记或 Spring 标记)运行循环并动态创建 tds 和 trs 等。
  • 您能否在下面提供答案,并附上一个伪代码示例?它将提供视觉清晰度。
  • @Mathew 在我深入研究旧代码并找到示例之前,已经有人回答了。无论如何,请检查我的答案,它可能会在将来对您有所帮助。
  • 感谢 Faraz,感谢您的帮助和支持 :)

标签: java jsp servlets


【解决方案1】:

可以在没有脚本的情况下完成:

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

<c:if test="${not empty request.records}">

  <table>
    <c:forEach items="${request.records}" var="record">
       <tr><td> ${record} </td></tr>
    </c:forEach>
  </table>

</c:if>

【讨论】:

  • 有些东西不见了:java.sun.com/jsp/jstl/core" prefix = "c" %>
【解决方案2】:

您需要在类路径中包含 JSTL 依赖项,并在 Spring 中对其进行配置。

如果您已经在 Spring 中配置了它,那么您可以通过这种方式动态创建 tds:

<table>
<thead>
    <tr>
        <th>Item1</th>
        <th>Item2</th>
        <th>Item3</th>
    </tr>
</thead>
<tbody>
    <c: forEach items="${menus}" var="menu" varStatus="status">
                            <tr>
        <td>${menu.item1}</td>
        <td>${menu.item2}</td>
        <td>${menu.item3}</td>
    </tr>
    </c: forEach>
</tbody>                        
</table >

这个${menus}是一个来自后端的列表它是一个POJO列表,包含3个字段item1、item2和item3。 您还需要在 .jsp 文件中包含 c 名称空间:&lt;%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %&gt;

互联网上有很多这样的例子。看看 Spring MVC 和 JSTL 和 Table。你会发现很多结果。

【讨论】:

  • 感谢@Faraz Durrani 的帮助。关于 JSTL - 这是唯一可以接受的方法吗?我只是想知道我的选择是什么,或者这是否是完整的行业标准。
  • JSTL 由 Java EE 提供。 Spring 基于 Java EE。我不是 100% 确定,但 JSTL 是我在 JSP 中循环遍历项目时唯一看到的。我认为spring tags 也可以用于循环,但我不确定。但是我读过的每一本书,我看过的每一个教程,都使用了 JSTL。
  • JSTL 是行业标准。是的。我对此有 100% 的信心。
【解决方案3】:

您可以使用“out”来打印响应。你为什么要做第一行?你从哪里得到的?

您可以执行以下操作:

<%
out.println("<table>");

while (records in request object){
    out.println("<tr>" + request.getAttribute().toString() + "</tr>");
}

out.println("</table>");
%>

【讨论】:

  • 这并不能真正回答问题。
  • 你是对的。我只是想指出,您可以首先使代码更容易。不需要:“PrintWriter writer = response.getWriter();”错误,因为结束标签未关闭:“writer.println("");"在 jsp 结束之前不要尝试关闭响应:“writer.close();”
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 2018-02-02
  • 2014-01-29
  • 2012-02-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
相关资源
最近更新 更多