我正在尝试构建一个时间跟踪页面,在其中显示项目名称、任务和每天计费的小时数。
这是我在 Java 端的对象:
ProjectTO project1 = new ProjectTO();
project1.setProjectName("Project ABC");
TreeMap tasks = new TreeMap();
tasks.put("100_t1", "Requirement");
tasks.put("100_t2", "Development");
project1.setTasks(tasks);
TreeMap hours = new TreeMap();
hours.put("100_t1:Mon", "8");
hours.put("100_t1:Wed", "7");
project1.setHours(hours);
我需要查看这个对象以在屏幕上显示值。这是我在 JSP 页面上的内容:
<s:iterator value="activeProjects">
<tbody>
<tr>
<td><p><s:property value="projectName"/></p></td>
</tr>
<s:iterator value="tasks">
<tr>
<td><s:property value="value"/></td>
<td><s:property value="hours[%{key+':Mon'}]"/></td>
<td><s:property value="hours[%{key+':Tue'}]"/></td>
..........
</tr>
</s:iterator>
</tbody>
</s:iterator>
问题是弄清楚如何显示小时数。上面显示的代码片段不起作用。我可以通过<s:set var="mon" value="%{key+':Mon'}">
在我的 td 标签 - hours[#mon] 中使用和引用它来让它工作。
有更好的解决方案吗?
编辑:
谢谢戴夫。你说的对。我正在寻找hours["100_t1:Mon"]
。
当我在视图层中迭代对象时,需要根据我正在迭代的任务行的键动态插入“100_t1”。'Mon'、'Tue' 可以硬编码。
我将看看我是否可以按照您的建议在视图层之外做得更好。到目前为止,这就是我为我工作的。
<s:iterator value="activeProjects">
<tbody>
<tr>
<td><p><s:property value="projectName"/></p></td>
</tr>
<s:iterator value="tasks">
<s:set var="mon" value="%{key+':Mon'}"/>
<s:set var="tue" value="%{key+':Tue'}"/>
<s:set var="wed" value="%{key+':Wed'}"/>
<s:set var="thu" value="%{key+':Thu'}"/>
<s:set var="fri" value="%{key+':Fri'}"/>
<s:set var="sat" value="%{key+':Sat'}"/>
<s:set var="sun" value="%{key+':Sun'}"/>
<tr>
<td><s:property value="value"/></td>
<td><s:property value="hours[#mon]"/></td>
<td><s:property value="hours[#tue]"/></td>
<td><s:property value="hours[#wed]"/></td>
<td><s:property value="hours[#thu]"/></td>
<td><s:property value="hours[#fri]"/></td>
<td><s:property value="hours[#sat]"/></td>
<td><s:property value="hours[#sun]"/></td>
</tr>
</s:iterator>
</s:iterator>
最终编辑:
以下语句帮助我避免使用 s:set 标签。我应该包围hours[key + ':Mon']
在里面%{}
。
value="%{hours[key + ':Mon']}"/>
这也有效
value="hours[key + ':Wed']"