#java #ajax #jsf #datatable
#java #ajax #jsf #datatable
Вопрос:
У меня есть вызов ajax, который обновляет следующую таблицу. Могу ли я скрыть столбец «Оценка» (это BigDecimal), если все значения равны null, в противном случае он должен отображаться?
<h:dataTable id="theTable" value="#{MyBean.people}" var="person">
<h:column>
<f:facet name="header">
<h:outputText value="Name" />
</f:facet>
#{person.name}
</h:column>
<h:column rendered="#{person.score != null}">
<f:facet name="header">
<h:outputText value="The Score" />
</f:facet>
#{person.score}
</h:column>
</h:dataTable>
При текущем отображении столбец всегда НЕ отображается, даже если значения не равны нулю.
Ответ №1:
«Простого» способа сделать это нет, вы должны посмотреть на полную коллекцию самостоятельно. Вы могли бы написать вспомогательный метод, который проверяет ваш список на наличие нулевых значений:
public boolean isAllScoresNull() {
for(Person p : people) {
if(p.getScore != null) return false;
}
return true;
}
и используйте это через EL на своей странице:
...
<h:column rendered="#{myBeanController.allScoresNull}">
...
Вы также могли бы определить функцию тегов для этой задачи.
Комментарии:
1. с другой стороны, вы могли бы захотеть использовать что-то вроде org.apache.commons.collections. CollectionUtils.isEmpty(люди), чтобы проверить список в примере выше…
2. Спасибо, мне было интересно, было ли возможным решением создание отдельного метода в компоненте.
3. @Ryan, создание отдельного метода в компоненте — это, я думаю, вопрос дизайна… Рад помочь!
4. @dnno Извините, но, когда я
update
сопоставляю данные с<p:ajax>
(привязанным к определенномуcommandButton
) itdoes NOT hide datatable
(при нажатии командной кнопки иlistener
вызове, там я проверилlist
и установилrendered = "#{controller.dataFound}"
значение approp. boolean). логическое значение). Есть ли решение для этого?