<h:form>
<fieldset>
<h:selectManyListbox id="listbox" value="#{form.items}">
<f:selectItems value="#{form.allItems}">
</h:selectManyListbox>
</fieldset>
<h:commandButton value="Get Table" action="#{form.getTable}">
<f:ajax render="result_table" execute="listbox" />
</h:commandButton>
<h:panelGrid id="result_table">
<table>
<thead></thead>
<tbody>
<ui:repeat var="table" value="#{form.resultTable}">
<tr>
<td>#{table.name}</td>
<td>
<h:selectBooleanCheckbox binding="#{showMore}">
<f:ajax render="inner" />
</h:selectBooleanCheckbox>
</td>
</tr>
<tr>
<td>
<h:panelGrid id="inner" rendered="#{not empty showMore.value and showMore.value}">
<table></table>
</h:panelGrid>
</td>
</tr>
</ui:repeat>
</tbody>
</table>
</h:panelGrid>
</h:form>
Я следовал за примером кода флажка от BalusC здесь .
Когда я нажимаю командную кнопку, основываясь на значениях списка, она генерирует табличный результат, который я отображаю в h:panelGrid id="result_table"
. Эта командная кнопка работает. Внутри сгенерированной таблицы у меня есть несколько вложенных таблиц, которые я хочу отобразить, но только если я поставлю флажок, чтобы показать их. Для флажка, если я использую render="@form"
, он свернет мою внешнюю родительскую таблицу. Если я использую render="inner"
, отметка / снятие флажка ничего не делает.
Как мне заставить это работать? Это потому, что два аякса находятся в конфликте?
К вашему сведению, я также попытался использовать свойство бина, но получил тот же результат. Когда я пытался использовать метод javascript, упомянутый в той же ссылке, но установка / снятие флажка не имела никакого эффекта.
Обновлено для добавления примера фрагмента и <ui:repeat></ui:repeat>
выше:
<h:selectBooleanCheckbox binding="#{showMore}">
<f:ajax render="inner" />
</h:selectBooleanCheckbox>
<h:panelGrid id="inner">
<h:outputText value="always" />
<h:outputText value="hidden" rendered="#{not empty showMore.value and showMore.value}" />
</h:panelGrid>