Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 通过javascript更新primefaces数据表中的可编辑单元格_Jsf_Primefaces_Datatable - Fatal编程技术网

Jsf 通过javascript更新primefaces数据表中的可编辑单元格

Jsf 通过javascript更新primefaces数据表中的可编辑单元格,jsf,primefaces,datatable,Jsf,Primefaces,Datatable,我使用的是PrimeFaces3.2/JSF2.0。我有一个单元格内可编辑的数据表。当我进入编辑模式时,我有一个输入框和一个按钮,当我点击按钮时,它会打开一个带有单个选择数据表的对话框。一旦选择了一行,我将更新整个数据表,该表将恢复为只读视图 我想用回调函数中的值更新可编辑单元格。因此,数据表仍处于可编辑模式,因为单元格的id中包含行索引,我不确定如何获取该id,以便更新输入框 这是我的页面 <h:panelGroup id="placesTable"> <h:for

我使用的是PrimeFaces3.2/JSF2.0。我有一个单元格内可编辑的数据表。当我进入编辑模式时,我有一个输入框和一个按钮,当我点击按钮时,它会打开一个带有单个选择数据表的对话框。一旦选择了一行,我将更新整个数据表,该表将恢复为只读视图

我想用回调函数中的值更新可编辑单元格。因此,数据表仍处于可编辑模式,因为单元格的id中包含行索引,我不确定如何获取该id,以便更新输入框

这是我的页面

<h:panelGroup id="placesTable">
     <h:form id="placesform" prependId="false" method="post" > 
        <p:dataTable var="item" value="#{placesBean.items}"   id="placesList" widgetvar="placesListVar" editable="true">

        <p:ajax event="rowEdit" listener="#{placesBean.saveRow}" />
...
<p:column headerText="Select Country" style="width:125px" nowrap="nowrap">
        <p:cellEditor>
            <f:facet name="output">
                <h:outputText value="#{item.country}" />
            </f:facet>
            <f:facet name="input">
                <p:inputText id="countryInput"  value="#{item.country}" style="float:left"/>
                <h:outputLink style="float:left" value="javascript:void(0)" onclick="countrySelectDialog.show()">   
                    <p:graphicImage value="/resources/images/select-icon.png" />
                </h:outputLink>
            </f:facet>
        </p:cellEditor>
    </p:column> 

...
我的选择器对话框的侦听器如下所示 我正在为选择器使用复合组件

<p:dialog id="countrySelectDialog" header="Indicator Groups"  height="250" showEffect="explode" hideEffect="explode">
        <h:form prependId="false">
            <selector:countrySelect data="#{countrySelector.countries}" selection="#{placesBean.selectedCountry}">
                <f:facet name="footer">
                    <p:commandButton actionListener="#{placesBean.processSelection}" value="Ok" icon="ui-icon ui-icon-search" oncomplete="countrySelectDialog.hide()" update=":placesTable" process="@form"/>

                </f:facet>              
            </selector:countrySelect>
        </h:form>

</p:dialog>

我的输入框的id显示如下
placeList:0:countryInput,如何在ajax回调中获取此id,以便更新此单元格而不是更新整个数据表。这将确保我的表格仍处于可编辑模式,然后在处理rowEdit事件时保存数据。

直到rowEdit完成且验证完成,出于所有目的,您需要参考placesBean,而不是dataTable。验证成功后,需要通过退出编辑模式更新数据表。但是,单击countryselect命令按钮后,如何更新可编辑单元格中的输入框?如果我可以获得行索引的句柄,那么我可以使用javascript更新该字段。我不确定如何从命令按钮传递行号。在dataTable中,像这样添加属性rowIndexVar。。。并且rowIndex可以用作任何客户端调用(javascript)中的参数,如….'#{rowIndex}'