Как я могу показать / скрыть столбец данных JSF с помощью ajax?

#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 ) it does NOT hide datatable (при нажатии командной кнопки и listener вызове, там я проверил list и установил rendered = "#{controller.dataFound}" значение approp. boolean). логическое значение). Есть ли решение для этого?