如何遍历地图和struts 2中的地图值

时间:2019-01-22 11:40:36

标签: jsp struts2

在这里我需要帮助来解决问题。我正在将现有的基于struts2的Web应用程序迁移到Spring Boot,我设法做到了,但是下面的代码无法正常工作。任何帮助将不胜感激。

<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以进行迁移。

2 个答案:

答案 0 :(得分:0)

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

这是(至少):

  • 缺少报价
  • 第二个参数中间有一个虚假的s:property

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

答案 1 :(得分:0)

我终于设法找到了解决方案。问题不仅仅在于遍历地图,还在于项目中所有与迭代相关的代码。所以我用不同的选项进行搜索,最后在下面的链接中得到了答案

How do you iterate through a list of objects?

不推荐使用带有struts 2.2.x的

id属性,并用var代替iterator标记。所以现在的工作代码如下

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