我期望ui:repeat会创建包含列的表行,但它会在行内创建跨度

时间:2012-11-27 12:23:33

标签: jsf

我正在使用Primefaces p:datatable with p:rowExpansion。我的目标是使用以下xhtml显示行详细信息。

<p:dataTable
        value="#{bilisimArizaBean.kullaniciBilisimArizalariListesi}"
        var="ariza">
        <p:column style="width:4%">
            <p:rowToggler />
        </p:column>
        <p:column headerText="Arıza no">
#{ariza.bilisimArizaId}
</p:column>
        <p:column headerText="">
#{ariza.bilisimArizaTuru.bilisimArizaTuru}
</p:column>
        <p:column>
#{ariza.cihazMarkasi} #{ariza.cihazModeli} #{ariza.cihazSeriNo}
</p:column>
        <p:column>
#{ariza.arizaAciklama}
</p:column>
        <p:rowExpansion>
            <div>
                <p:panelGrid id="display" columns="4" cellpadding="4"
                    style="border:1px;border-color:red;"
                    styleClass=" ui-widget-content grid">
                    <ui:repeat var="ticket" value="#{ariza.bilisimArizaTicket}">
                        <h:outputText value="Gelişme No" />
                        <h:outputText id="gelisme" value="#{ticket.ticketAciklama}" />
                        <h:outputText value="Durum:" />
                        <h:outputText id="durum" value="#{ticket.arizaDurum.durumAdi}" />
                        <br></br>
                    </ui:repeat>
                </p:panelGrid>
            </div>
        </p:rowExpansion>
    </p:dataTable>

我预计它会在p:rowExpansion中创建包含列的表行。但是,ui:repeat会生成一个只包含一列的行的表。并跨越此列。那是

<table>
<tr>
<td><span>data</span><span>data</span><span>data</span></td>
</tr>
<tr>
<td><span>data</span><span>data</span><span>data</span></td>
</tr>
.
.
.
</table>

我期待并想要以下

<table>
<tr>
<td>data</td>    <td>data</td>    <td>data</td>
</tr>
<tr>
<td>data</td>    <td>data</td>    <td>data</td>
</tr>
.
.
.
</table>

在这种情况下,为什么跨越而不是列?如何在一列中获取列而不是跨度?

问候

1 个答案:

答案 0 :(得分:1)

在您的特定构造中,<ui:repeat>内的<p:panelGrid>不会生成多个JSF组件,这些组件每次只生成一次HTML。相反,它重复使用相同的JSF组件在每次迭代时多次生成HTML输出。

这是不对的。您需要<h:dataTable><p:dataTable>而不是<p:panelGrid><ui:repeat>

E.g。

<h:dataTable var="ticket" value="#{ariza.bilisimArizaTicket}">
    <h:column><h:outputText value="Gelişme No" /></h:column>
    <h:column><h:outputText id="gelisme" value="#{ticket.ticketAciklama}" /></h:column>
    <h:column><h:outputText value="Durum:" /></h:column>
    <h:column><h:outputText id="durum" value="#{ticket.arizaDurum.durumAdi}" /></h:column>
</h:dataTable>

这些跨度不相关,它们只来自<h:outputText>