【问题标题】:how to implement this pattern using JSP如何使用 JSP 实现这种模式
【发布时间】:2012-03-01 18:12:53
【问题描述】:

我是使用 JSP 的新手,需要弄清楚如何做到这一点。我会很感激有关如何做到这一点的任何指示?

我需要以这种类似表格的结构显示图像。为了简化问题,

A  B  C
D  E  F
G  H  I

其中每个元素都是动作类中集合名称的一部分。

Set<String> names = new HashSet<String>(0);

names.add("A");
names.add("B");
names.add("C");
names.add("D");
names.add("E");
names.add("F");
names.add("G");
names.add("H");
names.add("I");

在 java 中做这件事相当简单,但是,我很难弄清楚,如何让迭代器手动指向下一个元素。

<s:iterator value="names">
 <s:property/>
 I'd now like to point iterator to point to next or run a nested iterator loop here.
</s:iterator>

【问题讨论】:

    标签: java jsp jsp-tags


    【解决方案1】:

    您可以使用 JSTL forEach 循环。你可以找到很多例子here

    【讨论】:

    • 有没有办法做这样的事情:iterator = iterator.next() ?
    • @brainydexter - 我不确定我是否理解迭代器的要求。如果您更愿意使用 Java 集合迭代器而不是 JSTL 循环,那么您可以将 Java 代码嵌入为 scriptlet。但是,我强烈建议不要这样做。您对 JSTL 循环有什么顾虑?这是在 JSP 中迭代集合的标准方法。
    • 我很抱歉。我来自 C++ 背景,倾向于这样想。我正在寻找嵌套循环或引用“下一个”元素的方法。我想你不能像那样引用下一个元素。 satoshi 的答案非常接近我最终使用的答案。
    • 另一个快速问:推荐还是反对将 jsp 标签与 jstl 标签混合使用?
    【解决方案2】:

    您可以使用 JSTL 轻松完成它:

    <table>
        <tr>
            <c:forEach items="names" var="name" varStatus="i">
                <c:if test="${!i.first && !i.last && i.index % 3 == 0}">
                    </tr>
                    <tr>
                </c:if>
                <td><c:out value="${name}" /></td>
            </c:forEach>
        </tr>
    </table>
    

    这样做,每 3 个元素就会添加一个新行 (&lt;/tr&gt;&lt;tr&gt;)。

    (未测试)

    【讨论】:

    • 你需要它,否则你最终会有一个空行
    【解决方案3】:

    正如 CoolBeans 所说,您可以使用 JSTL forEach 循环。

    如果您想查看这方面的示例(以及其他优秀的 JSTL 示例),请查看 JSTL Examples

    “迭代数据结构”包含一些关于您正在尝试做什么的信息和示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多