struts2 jstl迭代器标记

时间:2011-06-15 00:38:30

标签: java jsp struts2 iterator jstl

我一直在寻找如何在struts2 jstl中实现一个东西,但我无法找到方法。

当我从动作加载jsp页面时,我有一个String列表列表。

我想创建div作为元素有列表,但在每个div中,我想创建链接作为子列表的第三个元素。

所以我使用s:iterator标签来解析列表。但我不知道如何在第一个迭代器中迭代“$ {item [2]}”。

代码将是这样的:

<s:iterator value="functions" var="item" status="stat">
        <span class="operation">${item[1]}</span>
        <div id="${item[0]}">
            <s:for var $i=0;$i<${item[2]};$i++>
                <a href="#" id="link_$i">Link $i</a>
            </s:for>
        </div>
</s:iterator>

我把s:for标签放在哪里我想迭代“$ {item [2]}”次......

任何人都可以帮助我?

非常感谢您提前, Aleix

2 个答案:

答案 0 :(得分:2)

确保您在JSP页面中的范围内有JSTL核心库:

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

只需使用<c:forEach>即可。像这样:

<c:forEach var="i" begin="0" end="${item[2] - 1}">
    <a href="#" id="link_${i}">Link ${i}</a>
</c:forEach>

答案 1 :(得分:1)

如果合适,您应该使用 List of Map ,例如:

动作类

// List of raw type Map
private List<Map> functions = Lists.newArrayList(); // with getter

@Override
public String execute() {
    // loops {
        Map map = Maps.newHashMap();
        map.put("id", id);
        map.put("operation", operation);
        map.put("count", count); // count is int/Integer
        functions.add(map);
    // }

    return SUCCESS;
}

<强>的.jsp

<s:iterator value="functions">
    <span class="operation">${operation}</span>
    <div id="${id}">
        <s:iterator begin="0" end="count - 1" var="link">
            <a href="#" id="link_${link}">Link ${link}</a>
        </s:iterator>
    </div>
</s:iterator>

<小时/>

<s:a />(示例)

<s:a action="action_name" id="%{link}" anchor="%{link}">Link ${link}</s:a>

<强>输出

<a id="[id]" href="/namespace/action#[anchor]">Link [link]</a>

另见

  

Struts2 Guides - &gt; Tag Reference - &gt;的 s:iterator