Jsf p:PrimeFaces未更新dataTable.current().ajax().update

Jsf p:PrimeFaces未更新dataTable.current().ajax().update,jsf,primefaces,listener,Jsf,Primefaces,Listener,我开始使用JSF和PrimeFace数据表进行开发。我已准备好以下xhtml页面: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:f="http://java.sun.co

我开始使用JSF和PrimeFace数据表进行开发。我已准备好以下xhtml页面:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui">

        <h:head>
        <title>Find Capital of Countries</title>
        </h:head> 
        <h:body> 
            <h:form id="FrmTest">

                        <p:dataTable id="ListSites"  value="#{testing.SiteSearch()}" var="lst" editable="true">

                        <f:facet name="header">
                            List of Sites
                        </f:facet>

                        <p:column>
                            <f:facet name="header">
                                Site Code
                            </f:facet>
                            #{lst.stCode}
                        </p:column>

                        <p:column headerText="Site Description">
                            <h:outputText value="#{lst.stDescription}" />
                        </p:column>

                        <p:column  headerText="is Active">
                            <div style="text-align: center;">
                                <p:selectBooleanCheckbox value="#{lst.stActive}"  />
                            </div>
                        </p:column>

                        <p:column>
                            <f:facet name="header">
                                Site Active
                            </f:facet>
                            <div style="text-align: center;">
                                <h:outputText value= "#{lst.stActive}" />
                            </div>
                        </p:column>

                        <p:column>
                            <f:facet name="header">
                                Modified By
                            </f:facet>
                             #{lst.modifiedBy}
                        </p:column>

                        <p:column>
                            <f:facet name="header">
                                Modification Date
                            </f:facet>
                            #{lst.modifiedDate}
                        </p:column>                 

                        <p:column>
                            <f:facet name="header">
                                Has Error
                            </f:facet>
                            #{lst.hasError}
                        </p:column>     

                        <p:column>
                            <f:facet name="header">
                                Error Description
                            </f:facet>
                            #{lst.errorDescription}
                        </p:column>     

                        <p:column>
                            <f:facet name="header">
                                Row State
                            </f:facet>
                            #{lst.rowState}
                        </p:column>     


                    </p:dataTable>



                <h:outputLabel value="Enter Country Name:"/>
                <h:inputText id="country" binding="#{testing.country}"
                valueChangeListener="#{testing.findCapitalListener}"
                immediate="true"
                onchange="document.getElementById('findcapital').click();" />
                <br/>
                <br/>
                <h:outputLabel value="Capital is: " />
                <h:inputText id="capital" binding="#{testing.capital}" immediate="true"/>
                <br/>
                <br/>
                <h:commandButton  value="Submit" partialSubmit="true" />
                <div style="visibility: hidden" >
                    <h:commandButton id="findcapital" value="findcapital" partialSubmit="true"  immediate="true" />
                </div>

            </h:form>    
        </h:body> 
    </html>

问题是由于填充datatable(SiteSearch())的函数正在从数据库检索数据。在那个阶段,我希望在更新数据库之前刷新页面显示。我用列表获取程序替换了该函数,现在一切正常。

您好,了解
   ```
        public void findCapitalListener(ValueChangeEvent cdl) {
        String country = cdl.getNewValue().toString();
        System.out.println("Country is : " + country);
        StringBuilder capitalCountry = new StringBuilder();
        findCapital(country, capitalCountry);
        capital.setValue(capitalCountry.toString());    
        siteDto = listSiteDto.get(0);
        siteDto.setStDescription(capitalCountry.toString());
        listSiteDto.set(0, siteDto);
        PrimeFaces.current().ajax().update("FrmTest:ListSites");
        //System.out.println("Capital is : " + capital.getValue());
        //System.out.println("New DTO Description : " + siteDto.getStDescription());
        System.out.println("New list Description : " + listSiteDto.get(0).getStDescription());
        }
    ```