Я пытаюсь создать страницу отслеживания времени, где я показываю название проекта, задачи и часы, выставленные на каждый день.Как использовать <s:property> для доступа к карте с использованием OGNL
Вот объект я на стороне 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]).
Есть ли лучшее решение?
Редактировать:
Thanks Dave. Ты прав. Я ищу 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>
Final Edit:
Следующая инструкция помогает мне избежать необходимости использовать S: набор тегов. Я должен был окружить hours[key + ':Mon']
в пределах %{}
.
value="%{hours[key + ':Mon']}"/>
также это работает слишком
value="hours[key + ':Wed']"
спасибо за предложение. Я редактировал свой вопрос, чтобы показать, что сейчас работает для меня. Я не очень хорошо разбираюсь в том, как я его реализовал.я думаю, что есть лучший способ конкретно приложить часы к задачам. Любопытно: что вы подразумеваете под «подрывными парадигмами ООП с помощью карт и ad-hoc отношений» – user1187958
oh wait ... ваше предложение работает !! Я не использовал% {} в моем коде, когда я разместил этот вопрос. Благодаря!!! –
user1187958
@ user1187958 Задача - это класс, а не карта. Часы работы относятся непосредственно к задаче. Специальные строковые отношения не являются ООП. Java предоставляет механизмы (если подробно) для непосредственного связывания данных и операций; почему бы не использовать их? –