JSF условно отображает нижний колонтитул (фасет jsf)

Я хотел бы отобразить нижний колонтитул (с определенным содержимым), если содержимое с данными пусто.

Я нашел это Как условно отобразить ‹f:facet›? но на самом деле это не решает мою проблему, так как отображает нижний колонтитул только в том случае, если сообщение не пустое.

 <f:facet name="footer">
      <h:outputText value="List is empty" rendered="#{empty list}" />
 </f:facet>

Это работает, если список пуст, но если он не пуст, это отображает пустую строку как нижний колонтитул...

Любое другое обходное решение? Спасибо за помощь! Я использую MyFaces 2.0.13.


person user1323246    schedule 06.09.2012    source источник
comment
К вашему сведению: у меня это работает в Mojarra 2.1.12.   -  person BalusC    schedule 06.09.2012


Ответы (2)


Насколько я знаю, в JSF 1.2 нет простого способа сделать это.

Но вы можете использовать этот обходной путь:

Создайте класс css с display: none:

.hidden { display: none; }

В таблице данных укажите атрибут footerClass следующим образом:

<h:dataTable footerClass="#{hideFooterCondition ? 'hidden' : ''}">

Таким образом, вы можете легко скрыть нижний колонтитул, когда он должен быть.

Кроме того, если вы хотите уменьшить количество данных, отправляемых в браузер в случае, если нижний колонтитул не должен присутствовать, вы можете использовать то же условие в атрибуте rendered содержимого фасета:

<f:facet name="footer">
    <rich:datascroller for="myDataTable" rendered="#{not hideFooterCondition}" />
</f:facet>    
person Yuri Ghensev    schedule 07.11.2012
comment
Обратите внимание, что конкретная проблема OP касается конкретно MyFaces <h:dataTable> (и что я подтвердил, что код OP отлично работает в Mojarra). - person BalusC; 08.11.2012

Вы можете использовать hpanel вместо фасета, чтобы управлять этим. Я довольно часто использую эту технику в нескольких JSF-приложениях, над которыми работаю. Использование условных выражений в представлении считается плохой практикой в ​​JSF из того, что я читал. HTML:

<h:panelGroup rendered="#{isEmpty}">
  <h:outputText value="List is empty" />
</h:panelGroup>

Бэкер-фасоль:

boolean isEmpty = false;
if (list.isEmpty()) {
  isEmpty = true;
}
person Lipongo    schedule 06.09.2012
comment
Это тоже пробовал, но почему-то ничего не отображается, независимо от того, пуст список или нет :( - person user1323246; 06.09.2012
comment
Переменная, проверяемая из bean-компонента поддержки, должна быть логическим значением, для которого установлено значение true, если список пуст, а false списка содержит значения. - person Lipongo; 06.09.2012
comment
Этот ответ не имеет смысла. - person BalusC; 06.09.2012
comment
@BalusC Я отредактировал ответ, включив в него вспомогательный компонент, это может помочь понять ответ. Понял, что нужно больше информации после предыдущего комментария. - person Lipongo; 06.09.2012
comment
Обертывание родительского компонента и перемещение к нему атрибута rendered абсолютно не влияет на конкретную проблему OP. - person BalusC; 06.09.2012