If I use as below, I get no error, no output.
Why does p:panelGrid
not work with ui:repeat
?
Note : I don't want to use c:forEach
because of the I already face a lot of JSF issue.
<p:panelGrid>
<ui:repeat value="#{MyBean.dataList}" var="data">
<p:row>
<p:column>
<h:outputText value="#{data.name}"/>
</p:column>
<p:column>
<h:outputText value="#{data.description}"/>
</p:column>
</p:row>
</ui:repeat>
</p:panelGrid>
MyBean.java
public List<Data> getDataList(){
List<Data> result = new ArrayList<Data>();
result.add(new Data("Name 1", "Description 1"));
result.add(new Data("Name 2", "Description 2"));
result.add(new Data("Name 3", "Description 3"));
result.add(new Data("Name 4", "Description 4"));
return result;
}
Expected output with primefaces
ui:repeat
will not work because it does not actually add components to the component tree.
ui:repeat
only works during the render phase, and rerenders its child components multiple times with different state.
Some components, such as panelgrid
, but also datatable
, expect to have certain children in the component tree in order to work correctly. Since ui:repeat
does not add these, this approach does not work.
I'm sorry, but the normal solution for this is to use c:foreach
, which does add children to the tree.
See https://rogerkeays.com/jsf-c-foreach-vs-ui-repeat
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With