Как я могу использовать динамическое имя коллекции в цикле JSP? - PullRequest
0 голосов
/ 10 февраля 2011

Привет,

Мне нужно иметь возможность сделать что-то подобное (конечно, это не работает:

  <c:forEach var="column" items="${model.${listName}.enabledColumns}">
    ${column.name}
  </c:forEach>

Спасибо

Ответы [ 2 ]

3 голосов
/ 10 февраля 2011

Используйте скобки:

${requestScope[listName].eanbledColumns}

или, если ваша model фактически карта в запросе, то:

${model[listName].enabledColumns}
1 голос
/ 10 февраля 2011

Если ${listName} в этом контексте является свойством model (что-то, к чему вы обычно обращаетесь как model.getListNameX(), это будет возможно только с помощью отражения, и язык выражений не поддерживает это.

Но похоже, что рефакторинг вашего класса был бы более полезен. Если вы хотите выполнить итерацию по этим ${listName} с (при условии, что это в настоящее время свойства вашего model), почему бы вам просто не сохранитьсопоставить с константами enum в качестве ключей и теми объектами, на которые вы хотите ссылаться через ${listName} в качестве значений? (EnumMap будет полезно здесь).

Затем вы можете установить Enum.values() в качестве атрибута запросаитерируйте их как listName и получите:

${model.lists[listName].enabledColumns}
...