在这里我需要帮助来解决问题。我正在将现有的基于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以进行迁移。
答案 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>