如何迭代 struts 2 中的地图和地图值

how to iterate over a map and map values in struts 2

我在这里需要帮助来解决问题。我正在将现有的基于 struts2 的网络应用程序迁移到 spring 启动,我已经设法做到了,但是下面的代码没有按预期工作。任何帮助将不胜感激。

<s:iterator value="{#session['user'].menu}" id = "item" status="rowStatus">
  <div class='menucontent_bg' id ='menumenucontent_<s:property value="#rowStatus.index"/>'>
    <s:iterator value="value" id = "menu"> 
      <div class=menucontent_heading>
        <a href='javascript:createTab("<s:property value ="#menu.menuOption"/>", <s:property value ="#menu.menuUrl"/>");'>

          <s:property value ="#menu.menuOption"/>
        </a>
      </div>
    </s:iterator>
  </div>
</s:iterator>

在上面的代码中,迭代按预期进行,但是对 createTab 的 javascript 方法调用是使用空参数完成的,这意味着 #menu.menuOption 和其他传递的参数返回空字符串,这

我不确定为什么,因为我用一个简单的 scriptlet 进行了验证,并且值不为空,而且生产中也有相同的代码。为了迁移目的,我将 struts 版本升级到 2.5.1。

<a 
  href='javascript:createTab(". <s:property value ="#menu.menuOption"/>", 
        <s:property s:property value ="#menu.menuUrl"/>");'>

这是(至少):

  • 缺少引号
  • 在第二个参数中间有一个虚假的s:property

使用中间值 and/or 函数来完成这样的工作几乎总是更好、更清晰,例如,将 JS 移动到支持函数中,这样您就可以阅读自己的代码。

我终于找到了解决办法。问题不仅在于遍历地图,还在于我项目中所有与迭代相关的代码。所以我搜索了不同的选项,最终在下面的 link

中得到了答案

How do you iterate through a list of objects?

with struts 2.2.x id 属性已被弃用并替换为迭代器标记的 var。所以现在工作代码如下

               <s:iterator value="{#session['user'].menu}" var= "item" status="rowStatus">
              <div class='menucontent_bg' id 
                     ='menumenucontent_<s:property 
                           value ="#rowStatus.index"/>'>
                     <s:iterator value="value" var = "menu"> 
                     <div class=menucontent_heading>
                        <a href='javascript:createTab("<s:property         value ="#menu.menuOption"/>", <s:property value 
                                                  ="#menu.menuUrl"/>");'>

                           <s:property value ="#menu.menuOption"/>
                       </a>
                    </div>
                    </s:iterator>
              </div>
              </s:iterator>