Отображение данных с использованием JSF dataTable
Вопрос
Я хочу отображать данные с помощью тегов h:dataTable
в JSF
Данные, которые я отображаю, должны быть в таком формате:
Name: XXXX
ID: 8989
Age: 32
Я видел несколько примеров в Интернете, которые рассказывают вам, как отображать данные как это:
Имя ID Возраст XXX 8989 32
Поскольку тег dataTable
имеет только под тег h:column
, а НЕТ h:row
, у меня
проблемы с этим. Есть лучший способ сделать это? Я реализовал первый
формат, который я упомянул, используя h:datable
и <=>, поэтому сначала я просто записываю все заголовки столбцов в столбце 1, а затем записываю все значения в column2. Проблема, с которой я сталкиваюсь, заключается в том, что когда одно из значений пустое, на его месте печатается следующее значение, а данные отображаются неверно, это действительно проблема форматирования. Когда данные пустые, они должны оставить место для них, а затем вывести следующее значение в следующей строке.
Надеюсь, что я имею смысл, любые мысли будут высоко оценены.
Я попытался добавить ниже:
<h6><h:outputText value="#{empty imeiInfo.userEmail ? ' ' : imeiInfo.userEmail}"></h:outputText></h6><br/>
Но в этом есть синтаксическая ошибка, которую я не могу понять, сообщение, которое я получаю:
Синтаксическая ошибка в EL
Есть идеи? Спасибо.
Решение
Это только для неповторяющихся данных? Если это так, используйте <h:panelGrid>
Например:
<h:panelGrid columns="2">
<h:outputText value="Name:"/>
<h:outputText value="#{person.name}"/>
<h:outputText value="ID:"/>
<h:outputText value="#{person.id}"/>
<h:outputText value="Age:"/>
<h:outputText value="#{person.age}"/>
</h:panelGrid>
Если это для повторяющихся данных (т.е. нескольких «людей»), то у вас есть несколько вариантов в зависимости от того, какие другие библиотеки вы используете. Например:
1. Создайте свою собственную таблицу, используя Facelets <ui:repeat>
(вы можете сделать то же самое с <c:for>
). Например:
<table>
<ui:repeat value="#{myBean.persons}" var="person">
<tr>
<td>
<h:outputText value="Name:"/>
</td>
<td>
<h:outputText value="#{person.name}"/>
</td>
</tr>
<tr>
<td>
<h:outputText value="ID:"/>
</td>
<td>
<h:outputText value="#{person.id}"/>
</td>
</tr>
<tr>
<td>
<h:outputText value="Age:"/>
</td>
<td>
<h:outputText value="#{person.age}"/>
</td>
</tr>
<tr>
<td colspan="2">
 
</td>
</tr>
</ui:repeat>
</table>
РЕДАКТИРОВАТЬ: я не пробовал этого, но вы должны иметь возможность заключить в первом примере (<=>) <=> для рендеринга повторяющихся элементов. <=> обрабатывается до <=>. Должно работать.
Другие советы
Я не уверен, что понимаю, как вы хотите визуализировать свою таблицу. Я думаю, это помогло бы нам, если бы вы могли предоставить код JSF вашей таблицы ...
Однако по этому поводу:
Когда данные пустые, они должны покинуть место для него, а затем распечатать следующий значение в следующей строке
может быть, вы можете попробовать что-то подобное:
<h:outputText value="#{empty aRecord.name ? ' ' : aRecord.name}"/>
Этот код будет отображать неразрывный пробел, если имя записи пустое, в противном случае он будет отображать name
записи.