2012-04-03 86 views
0

我创建一个菜单,并为每个菜单组件,我有一个特定ID:Struts2的:更改开始迭代器值

<li id="ll1"><a href="javascript:{}" id="al1">Component</a></li> 

从DB检索的部件,我使用的迭代器标签来动态显示它们:

<s:iterator value="#session.loggedinUser.compNames" status="statusObject" var="parent"> 
<s:if test="#session.loggedinUser.compAccess[#statusObject.index] == 0"> 
    <li id="ll<s:property value="#statusObject.index"/>"> 
    <a href="javascript:{}" id="al<s:property value="#statusObject.index"/>" onclick="menuBar('none')"> 
    <s:property value="#parent"/> 
    </a> 
    </li> 
</s:if> 

迭代器按我希望的方式工作,菜单列表完全生成。但是,它开始于列表ID = 0,因为这样的:

<li id="ll0"><a href="javascript:{}" id="al0" onclick="menuBar('Component')">Component</a> 

有什么办法从1开始列表ID分配,同时保持我的迭代器列表的初始读数指数在0? (我不想失去我的列表中的第一个值!)

如果我搞糊涂你在任何地方,请要求澄清。

谢谢!

回答

1

您的意思是<s:property value="#statusObject.index + 1"/>而不是<s:property value="#statusObject.index"/>如果是这样的话......您可能需要快速扫描http://commons.apache.org/ognl/language-guide.html。 Struts2的使用OGNL作为EL,通常...如果你要来的列表返回不同的,那么你就需要使用JS修改参数提交之前。

+0

谢谢,它的工作完美!我不知道你可以简单地添加+1。我虽然这样做会抛弃整个事情。我希望我有更多的选票给你,因为你让我摆脱了尝试后端迂回的解决方案。再次感谢! – user1073616 2012-04-03 20:05:32

+0

需要注意的一些事项:像在java中一样使用对象方法,甚至可以直接访问静态成员(需要进行struts2配置更改)。创建一个新对象,然后用它做点什么,还有很多好东西。你不能做什么,据我所知是遍历一个POJO的属性(嗯,你可以的,如果它提供了你所期望提供迭代...的接口之一)。所以今天的主题是创建一个标签,它将创建一个这样的属性的字符串列表,这样你就可以在视图中的迭代器中使用该列表。 – Quaternion 2012-04-03 21:36:02

1

避免不必要的计算。

<s:property value="#statusObject.count"/> index is 0-based. 
    <s:property value="#statusObject.index"/> count is 1-based.