Отображение данных с использованием JSF dataTable

StackOverflow https://stackoverflow.com/questions/1403284

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хочу отображать данные с помощью тегов 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 ? '&#160;' : 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">
              &#160;
           </td>
        </tr>
    </ui:repeat>
</table>

РЕДАКТИРОВАТЬ: я не пробовал этого, но вы должны иметь возможность заключить в первом примере (<=>) <=> для рендеринга повторяющихся элементов. <=> обрабатывается до <=>. Должно работать.

Другие советы

Я не уверен, что понимаю, как вы хотите визуализировать свою таблицу. Я думаю, это помогло бы нам, если бы вы могли предоставить код JSF вашей таблицы ...

Однако по этому поводу:

  

Когда данные пустые, они должны покинуть   место для него, а затем распечатать следующий   значение в следующей строке

может быть, вы можете попробовать что-то подобное:

<h:outputText value="#{empty aRecord.name ? '&#160;' : aRecord.name}"/>

Этот код будет отображать неразрывный пробел, если имя записи пустое, в противном случае он будет отображать name записи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top