为什么我必须两次发出AJAX请求来显示primefaces

时间:2013-03-29 11:03:04

标签: ajax jsf-2 primefaces spring-webflow

我正在使用一个primefaces来显示一组动态列,如下所示:

    <p:dataTable value="#{queryResults}" var="row" style="margin-top:15px;">
         <p:columns value="#{row.cells}" var="cell" headerText="#{cell.field.label}" rendered="#{not cell.field.hidden}">
               <h:outputText value="#{cell.value}" />
          </p:columns>
    </p:dataTable>

我的环境是Majorra 2.0.3,PF 3.5,tomcat 7上的Spring Webflow 2.3

当我点击我的命令按钮时,我会得到一个部分响应,但表中没有单元格:

    <div id="alertForm:j_idt58" class="ui-datatable ui-widget" style="margin-top:15px;">
          <table role="grid"><thead><tr role="row"></tr></thead><tfoot></tfoot>
          <tbody id="alertForm:j_idt58_data" class="ui-datatable-data ui-widget-content">
              <tr data-ri="0" class="ui-widget-content ui-datatable-even" role="row"></tr>
              <tr data-ri="1" class="ui-widget-content ui-datatable-odd" role="row"></tr>
              <tr data-ri="2" class="ui-widget-content ui-datatable-even" role="row"></tr>
              <tr data-ri="3" class="ui-widget-content ui-datatable-odd" role="row"></tr>
          </tbody></table></div>

即使调用了java代码,也会按预期返回行。我第二次点击按钮,调用相同的java代码,但部分响应包含数据表及其单元格,因此它显示正确...

我想念什么?

注意:结合使用datatable +几列,一切正常......

2 个答案:

答案 0 :(得分:0)

尝试将<p:datatable>放在单独的<h:form>中,以便为我解决问题。

答案 1 :(得分:0)

解决方案是:以下内容:(阅读手册)p:columns仅用于显示标题和创建索引变量(columnIndexVar),允许您以“旧式”索引方式访问数据。

曼努埃尔说:

  

动态列   动态列非常方便,以防您无法知道要渲染的列数。列组件用于以编程方式定义列。它需要一个集合作为值,两个迭代器变量名为var和columnIndexVar。

<p:dataTable var="cars" value="#{tableBean.dynamicCars}" id="carsTable">
    <p:columns value="#{tableBean.columns}" var="column" columnIndexVar="colIndex">
        <f:facet name="header">
            <h:outputText value="#{column}"/>
        </f:facet>
        <h:outputText value="#{cars[colIndex].model}" /> <br />
        <h:outputText value="#{cars[colIndex].year}" /> <br />
        <h:outputText value="#{cars[colIndex].color}"/>
    </p:columns>
</p:dataTable>