Я пытаюсь написать панель резервного копирования , показывающую состояние резервного копирования нескольких серверов. Идея состоит в том, чтобы показать таблицу с JSP, которая имеет даты последних нескольких дней в столбцах и имена серверов в строках. В таблице этого бедняка я написал значения Да / Нет.
+------------+------------+------------+------------+
+ Host Name | 2011-06-10 | 2011-06-09 | 2011-06-08 |
+------------+------------+------------+------------+
| web01 | Y | Y | N |
+------------+------------+------------+------------+
| web02 | Y | Y | Y |
+------------+------------+------------+------------+
Каждый сервер делает свое собственное резервное копирование и сохраняет состояние в Amazon SimpleDb, и я написал метод Java для получения этой информации за последние несколько дней со следующей подписью:
/**
* List MySQL backups of the last howManyDays days. It starts from today
* included at index 0 and goes back in the past until we have a list of
* howManyDays days, even if some day doesn't have any data. Return a list of
* dates, each of which contains a list of backup jobs executed by servers in
* that day.
*
* @param howManyDays
* how many days of backup to show
* @return a Map where each key is the date in ISO format (2011-06-10) and each
* element is a backupJob which is represented by a Map where the key is
* the server name (ex. web01, web01) and the value is "Y" if all was
* fine, otherwise it contains the error message.
*/
public Multimap<String, Map<String, String>> listMysqlBackups(int howManyDays);
Multimap - это Google Guava Multimap, потому что у меня несколько резервных копий в день. Пример вывода:
{2011-06-10=[{web06=Y}, {web05=Y}], 2011-06-08=[{web05=Y}, {web06=Y}],
2011-06-09=[{web05=Y}, {web06=Y}], 2011-06-07=[{web05=Y}, {web06=Y}]}
Я не знаю, как использовать эту информацию в JSP. Я пробовал с foreach:
<c:forEach items="${backups}" var="backup" varStatus="backupId">
${backup.key}
</c:forEach>
И ответ был:
javax.servlet.ServletException: javax.servlet.jsp.JspTagException: Don't know
how to iterate over supplied "items" in <forEach>
Теперь я думаю, если я застрелюсь в ногу со слишком сложным возвращаемым значением и должен ли я вместо этого вернуть простой ArrayList из HashMap, где каждый HashMap содержит всю необходимую информацию (дата, имя хоста, сообщение). Если вы, ребята, думаете, что это лучший подход, у меня нет проблем переписать Java-метод, извлекающий данные, но теперь каждая ячейка будет нуждаться в цикле по всему ArrayList, чтобы получить элемент (что может быть хорошо, потому что 6 серверов на 7 дней всего 42 элемента).
Как бы вы подошли к этой проблеме?