Для этого вы можете использовать JSTL <c:forEach>
. Каждая итерация возвращает Map.Entry
, который, в свою очередь, имеет методы getKey()
и getValue()
. Предполагая, что у вас есть Map<String, String>
со значениями параметров в качестве ключей карты и метками параметров в качестве значений карт, вот пример:
<select name="foo">
<c:forEach items="${bean.map}" var="entry">
<option value="${entry.key}" ${entry.key == param.foo ? 'selected' : ''}>${entry.value}</option>
</c:forEach>
</select>
Что касается замены унаследованного Jakarta taglib, взгляните на MVC-фреймворки, которые предлагают taglibs для привязки модели к представлению. Например, Struts 1.x (по сути, небольшое развитие унаследованного Jakarta taglib), Struts 2.x (дальнейшее развитие) и JSF (другое эволюция в том же направлении, что и Struts 2.x).
Вот пример того, как визуализировать HTML <select>
в JSF.
<h:selectOneMenu id="foo" value="#{bean.selectedItem}">
<f:selectItems value="#{bean.selectItems}" />
</h:selectOneMenu>
JSF прозрачно связывает его с моделью без необходимости писать собственный контроллер (сервлет).