Displaying data using JSF dataTable

datatablejsf

I want to display data using the h:dataTable tags in JSF
The data I am displaying has to be in a format like this:

Name:   XXXX
ID:  8989
Age:    32

I have seen several examples on the web that tell you how to display the
data like this:

Name ID Age
XXX 8989 32

Since the dataTable tag only has a sub tag h:column and NO h:row I am having
issues with this. Is there a better way to do this? I have implemented the first
format I mentioned using h:datable and h:column, so first I just write out all the column headers in column 1 and then I write out all the values in column2. The issue I am facing is that when one of the values is blank the next value gets printed in its place and the data appears wrong, this is really a formatting issue. When data is blank it should leave space for it and then print the next value in the next row.
Hope I am making sense, any thoughts will be much appreciated.


I tried adding the below :

<h6><h:outputText value="#{empty imeiInfo.userEmail ? '&#160;' : imeiInfo.userEmail}"></h:outputText></h6><br/>

But there is a syntax error in this which I cannot figure out, the message I get is:

Syntax error in EL

Any ideas? Thanks.

Best Solution

Is it just for a non-repeating data? If so, use <h:panelGrid>

For example:

<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>

If it is for repeating data (ie. multiple 'persons') then you have a number of options depending on what other libraries you are using. For example:

1: Build your own table using Facelets <ui:repeat> (you could do the same with <c:for>). For example:

<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>

EDIT: I haven't tried this but you should be able to surround the in the first example (<h:panelGrid>) with a <c:for> to render repeating elements. The <c:for> gets processed before the <h:panelGrid>. Should work.

Related Question