Struts2 JSTL迭代器标签

3

我一直在寻找如何在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


什么是“函数”,你想要什么输出? - lschin
"functions"是一个列表,其中每个位置都有一个字符串子列表。 我已经简化了代码,但我想要的更多或更少是与子列表中第3个位置的数字相同数量的div,以及在每个div中链接的数量。 谢谢;) - Aleix
2个回答

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>

谢谢Asaph, 我一直在尝试不混合使用Struts标签(s:)和JSTL标签(c:)来完成它,但我看到这将是唯一的方法。非常感谢您的回答;) - Aleix

1

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

Action类

// 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>


or with <s:a /> (example)

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

output

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

See also

Struts2 Guides -> Tag Reference -> s:iterator


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接