Я работаю над проектом, который требует от меня отображения и возможности выбора и хранения тегов для продукта. Теги представлены в древовидной структуре. Я не могу предположить максимальную глубину дерева тегов.Динамически устанавливаемое значение h: selectOneMenu с использованием c: forEach
Я хотел отображать теги, разделенные уровнями, используя c: forEach - p: selectManyCheckbox - f: selectItems и обработку выборов с использованием компонентов p: ajax.
Я использую следующие типы для хранения возможных значений и выбора в дереве объектов:
HashMap<Long, ArrayList<Tag>> tree;
HashMap<Long, Object[]> selected;
ключи HashMap равны «уровень тегов».
Для отображения значений я использую следующий код для тестирования:
<p:panelGrid id="tagDisplay" columns="2">
<c:forEach begin="1" end="5" var="idx">
<p:outputLabel value="#{idx}"></p:outputLabel>
<p:selectManyCheckbox value="#{product.tags.selected[1]}">
<f:selectItems value="#{product.tags.tree[1]}" var="tag" itemLabel="#{tag.name}" itemValue="#{tag.id}" />
<p:ajax listener="#{product.selectorListener}" update="tagDisplay" />
</p:selectManyCheckbox>
</c:forEach>
</p:panelGrid>
код вроде нормально работает, хотя отображается пять раз.
Теперь я застреваю, пытаясь динамически связывать хэш-карты с селекторами. Когда я заменил «1» на «idx», я не получил никаких результатов.
Я попытался использовать ui-repeat с манекеном, но затем я потерял структуру панели.
Любая помощь будет оценена!
Моя среда - Websphere 8,5, JSF 2.2, 5.2 Primefaces
Хм, идея итерации кажется солидной, спасибо! Поэтому я должен использовать LinkedHashMap для сохранения порядка итераций. Правильно ли я понял? – ShirouWrath
Чтобы сохранить порядок вставки. В противном случае заказ в основном зависит от JVM make/version. – BalusC
Oj, я проверю это, спасибо за вашу поддержку, как всегда: D – ShirouWrath