如果我使用如下,我没有错误,没有输出。
为什么p:panelGrid
不适用于ui:repeat
?
注意:我不想使用c:forEach
因为我已经面临很多JSF问题。
<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;
}
带有primefaces的预期输出
答案 0 :(得分:8)
ui:repeat
将无效,因为它实际上并未向组件树添加组件。
ui:repeat
仅在呈现阶段有效,并以不同的状态多次重新呈现其子组件。
某些组件(例如panelgrid
,还有datatable
)希望组件树中有某些子组件才能正常工作。由于ui:repeat
不添加这些,因此这种方法不起作用。
对不起,但正常的解决方法是使用c:foreach
, 将子项添加到树中。
请参阅http://www.ninthavenue.com.au/blog/c:foreach-vs-ui:repeat-in-facelets
答案 1 :(得分:0)
通过在columns
中定义p:panelGrid
来尝试,因为您有静态数字列,那么您应该定义<p:panelGrid columns="">
。它会起作用。
但我建议您使用primefaces datatable
进行此
<p:dataTable id="availableCars" var="car" value="#{tableBean.carsSmall}">
<p:column style="width:20px">
<h:outputText id="dragIcon"
styleClass="ui-icon ui-icon-arrow-4" />
<p:draggable for="dragIcon" revert="true" />
</p:column>
<p:column headerText="Model">
<h:outputText value="#{car.model}" />
</p:column>
<p:column headerText="Year">
<h:outputText value="#{car.year}" />
</p:column>
<p:column headerText="Manufacturer">
<h:outputText value="#{car.manufacturer}" />
</p:column>
<p:column headerText="Color">
<h:outputText value="#{car.color}" />
</p:column>
</p:dataTable>
Here is the link你可以在那里找到这个代码和primnefaces展示。我认为它将满足你的要求