【问题标题】:How to Display List Contents in tabular format in a JSP file?如何在 JSP 文件中以表格格式显示列表内容?
【发布时间】:2011-12-27 15:33:11
【问题描述】:

在 Action.java 文件中,我使用以下代码。

request.setAttribute("TAREWEIGHT", tareWeightList);
    request.setAttribute("BARCODE", barcodeList);
return (mapping.findForward(target));

tareWeightList 和barcodeList 实际上只包含很少的值。 将列表值设置为属性后,java 文件将内容转发到 JSP 文件。

在 JSP 文件中,我可以使用下面的行获取内容,

<%=request.getAttribute("TAREWEIGHT")%>
<%=request.getAttribute("BARCODE") %>

我的要求是列表的内容应该以表格格式显示。

第一列中的条形码值及其对应的第二列中的皮重值。

建议我在 JSP 文件中编写代码以便内容以表格格式显示。

【问题讨论】:

    标签: java jsp


    【解决方案1】:

    使用 HTML &lt;table&gt; 元素来表示 HTML 中的表格。使用 JSTL &lt;c:forEach&gt; 遍历 JSP 中的列表。

    例如

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    ...
    <table>
      <c:forEach items="${list}" var="item">
        <tr>
          <td><c:out value="${item}" /></td>
        </tr>
      </c:forEach>
    </table>
    

    您的代码中只有一个设计缺陷。您已将相关数据拆分为 2 个独立列表。这会使最终的方法变得像

    一样丑陋
    <table>
      <c:forEach items="${TAREWEIGHT}" var="tareWeight" varStatus="loop">
        <c:set var="barCode" value="${BARCODE[loop.index]}" />
        <tr>
          <td><c:out value="${tareWeight}" /></td>
          <td><c:out value="${barCode}" /></td>
        </tr>
      </c:forEach>
    </table>
    

    我建议创建一个自定义类来将相关数据保存在一起。例如

    public class Product {
    
        private BigDecimal tareWeight;
        private String barCode;
    
        // Add/autogenerate getters/setters/equals/hashcode and other boilerplate.
    }
    

    这样你最终会得到一个List&lt;Product&gt;,它可以表示如下:

    <table>
      <c:forEach items="${products}" var="product">
        <tr>
          <td><c:out value="${product.tareWeight}" /></td>
          <td><c:out value="${product.barCode}" /></td>
        </tr>
      </c:forEach>
    </table>
    

    将其放入请求范围后如下:

    request.setAttribute("products", products);
    

    另见:

    【讨论】:

    • @BalusC 在我的 Eclipse 研讨会中,它将这些标签显示为未知标签。 JSP版本有问题吗?
    • 您需要在 JSP 的顶部声明 JSTL taglib。单击“我们的 JSTL wiki 页面”链接以获取详细信息。我编辑了答案以将声明示例添加到第一个 sn-p。
    • 当我尝试在您的答案中使用第二段代码时,${tareWeight},${barCode} 被打印在表格中,而不是它们对应的内部值。请让我知道我哪里出错了。
    • 修复您的 web.xml 以与您的 web 容器支持的 servlet API 版本保持一致,该版本应至少为 Servlet 2.4。另请参阅“我们的 JSTL wiki 页面”链接的底部。
    • 我的 webcontainer 似乎小于 Servlet2.4。那么还有其他方法可以解决这个问题吗?
    【解决方案2】:

    使用&lt;c:forEach&gt;&lt;TABLE&gt;

    例如:

    <TABLE>
    <c:forEach items="${personList} var="peson">
    
      <tr>
        <td><c:out value="${person.name}"/></td>
        <td><c:out value="${person.age}"/></td>
      </tr>
    </c:forEach>
    </TABLE>
    

    【讨论】:

    • 如何先显示50岁以下的人,然后休息
    • 要么直接在 backing bean 上对它们进行排序,要么在视图模板上使用 2 个循环并将 if 条件放在第一个循环上
    【解决方案3】:

    首先,您不应该在 JSP 中使用 scriptlet。使用 JSTL、其他自定义 JSP 标记和表达式语言。

    第二:MVC 框架的重点是让动作为视图准备模型,这应该保持非常简单。您可能应该使该操作创建一个对象列表,每个对象都包含来自条形码的字段及其相应的皮重。这样,您的 JSP 中就只有一次迭代。

    因此代码非常简单:

    <c:forEach var="barCodeAndTareWeight" items="BARCODE_AND_TAREWEIGHTS">
        <tr>
            <td><c:out value="${barCodeAndTareWeight}.someField"/></td>
            <td><c:out value="${barCodeAndTareWeight}.someOtherField"/></td>
        </tr>
    </c:forEach>
    

    请注意,存在特定的自定义标签来显示表格,支持排序,分页等。我喜欢使用displaytag

    【讨论】:

    • 如何先显示50岁以下的人,然后休息
    【解决方案4】:

    我在.jsp页面上添加了这个,问题已经解决了:

    <%@ page isELIgnored="false" %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-08
      • 2021-05-02
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多