2012-04-03 81 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.