У меня есть некоторый код JSF, который в настоящее время работает (как показано ниже), и я должен изменить его для условного подавления дисплея определенных строк таблицы. Я знаю, как условно подавить дисплей конкретной ячейки, но это, кажется, создает пустую ячейку, в то время как то, что я пытаюсь сделать, не должно отображать строку вообще.
Какие-либо предложения?
<h:dataTable styleClass="resultsTable" id="t1" value="#{r.common}" var="com" headerClass="headerBackgrnd" rowClasses="rowOdd, rowEven" columnClasses="leftAlign, rightAlign, leftAlign">
<h:column>
<h:outputText rendered="#{com.rendered}" styleClass="inputText" value="#{com.description}: " />
</h:column>
<h:column>
<h:outputText styleClass="outputText" value="#{com.v1}" />
</h:column>
<h:column>
<h:inputText styleClass="inputText" value="#{com.v2}" />
</h:column>
</h:dataTable>
В основном, строка, которая говорит #{com.rendered}
условно отобразит содержание отдельной ячейки, производя пустую клетку когда com.rendered
ложь. Но я хочу пропустить всю строку дисплея при определенных условиях - как я пошел бы о выполнении этого?
Строки соответствуют объектам данных в коллекции вашей таблицы. Если вам не нужна строка, не помещайте объект в коллекцию.
В качестве альтернативы вы можете использовать параметр rowClasses
для dataTable.
Код компонента:
public String getRowClasses() {
StringBuilder sb = new StringBuilder();
for (Data data : myData) {
sb.append(data.hide ? 'hide,' : 'show,');
}
return sb.toString();
}
CSS:
tr.hide {display:none;}
Я успешно скрыл строки, поместив отображаемый атрибут во все теги
. Проблема в том, что он подавляет заголовки таблиц. Если в вашей таблице нет заголовков таблицы (это
теги, встроенные в
), этот подход может сработать для вас.
В конечном итоге я использовал несколько списков в компоненте поддержки, так как мне были нужны заголовки таблиц.