进行了Ajax调用,但相关字段仅在页面刷新后更新

进行了Ajax调用,但相关字段仅在页面刷新后更新,ajax,jsf,primefaces,Ajax,Jsf,Primefaces,我尝试过使用JSF2和PrimeFaces2.2对selectOneMenu进行ajax调用。正在调用actionListener方法。但是我在update属性中指定的列没有得到更新。当我参考页面时,我可以找到更新的值。请帮我解决这个问题 我使用的代码是 <h:form id="mainForm" prependId="false"> <p> <p:tabView> <p:tab title="Receipt">

我尝试过使用JSF2和PrimeFaces2.2对selectOneMenu进行ajax调用。正在调用actionListener方法。但是我在update属性中指定的列没有得到更新。当我参考页面时,我可以找到更新的值。请帮我解决这个问题

我使用的代码是

    <h:form id="mainForm" prependId="false">
<p>
<p:tabView>
        <p:tab title="Receipt">

    <p:dataTable id="table1" var="recepit" rowIndexVar="rowIndex"   value="#{ReceiptDetailsBean.iterativeList}" scrollable="true"  height="120px" styleClass="leftTable">

            <p:column style="background-color: #EFF2F9">
                <f:facet name="header">
                    <h:outputText value="SL NO" />
            </f:facet>
                    <h:outputText value="#{rowIndex+1}" />

            </p:column>

            <p:column >
                <f:facet name="header">
                    <h:outputText value="Buss." />
                </f:facet>

                        <h:selectOneMenu id="selectOneCb4" value="#{ReceiptDetailsBean.bussCode}" >
                            <f:selectItem itemLabel="V_BUSS_CODE" itemValue=""/>
                            <f:selectItems value="#{ReceiptDetailsBean.rdetails}" var="model" itemLabel="#{model.buss}" itemValue="#{model.buss}"/>
                             <p:ajax update="table1:#{rowIndex}:receiptCode, table1:#{rowIndex}:referenceType"  actionListener="#{ReceiptDetailsBean.obtainReceiptDatabasedOnBussCode}" event="change"/>  
                        </h:selectOneMenu>

            </p:column>

            <p:column>
                <f:facet name="header">
                    <h:outputText value="Receipt Code" />
                </f:facet>
                    <h:inputText value="#{ReceiptDetailsBean.receiptCode}" id="receiptCode" style="font-family: verdana;font-size: 10px;width:80px;height:15px" onkeypress="return showForhotKey(event,'#{rowIndex}');"/>

            </p:column>

            <p:column>
                <f:facet name="header">
                    <h:outputText value="Ref Type" />
                </f:facet>
                    <h:inputText value="#{ReceiptDetailsBean.receiptType}" id="referenceType" style="font-family: verdana;font-size: 10px;width:80px;height:15px"  onkeypress="return showForhotKey(event,'#{rowIndex}');"/>

            </p:column>
    </p:dataTable>  
        </p:tab>

        <p:tab title="Print">

        </p:tab>



尝试
f:ajax
而不是
p:ajax
,然后重新呈现整个表单以更接近问题源:

<h:selectOneMenu id="selectOneCb4" value="#{ReceiptDetailsBean.bussCode}" >
   <f:selectItem itemLabel="V_BUSS_CODE" itemValue=""/>
   <f:selectItems value="#{ReceiptDetailsBean.rdetails}" var="model" 
                  itemLabel="#{model.buss}" itemValue="#{model.buss}"/>
   <f:ajax render="@form"  
           listener="#{ReceiptDetailsBean.obtainReceiptDatabasedOnBussCode}"/>  
</h:selectOneMenu>


这应该像我在回答前面的问题时所说的那样起作用。

数据表的部分更新和由数据表中的组件触发的数据表的ajax更新在Primefaces的2.2版本中不起作用。这是一个已知的错误,可能已在版本3中解决


您可以尝试的一个建议是为每个数据表使用一个表单,并且只更新该表单中的元素。

重复感谢您的回复。我早些时候尝试过这个,但是整个表单正在刷新。我不想刷新整个表单,因为它包含许多数据表。我该怎么做才能只呈现数据表中的特定列。@Sarath我不知道这是否可行。我曾经在(部分)数据表更新方面遇到过一些问题,最终总是更新整个表(你用f:ajax尝试过吗?)或者在表周围使用包装器h:panelGroup。非常感谢你的宝贵建议