如何迭代 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>
我在这里需要帮助来解决问题。我正在将现有的基于 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>