问题描述
|
我一直在寻找如何在struts2 jstl中实现某件事的方法,但是对我来说这是不可能的。
当我从动作加载jsp页面时,我有一个String列表列表。
我想将divs创建为具有列表的元素,但是在每个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]} \”次的地方...
有人可以帮助我吗?
预先非常感谢您,
阿莱克斯
解决方法
确保您的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>
, 适当时应使用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指南->标记参考-> s:iterator