primefaces dataTable editMode在对话框外工作正常但不在其中工作

时间:2014-07-03 16:06:03

标签: jsf-2 primefaces datatable

我在PrimeFaces 5.0中使用JSF 2.2。我有一个带有单元格编辑的dataTable。

当我设置editMode =&#34; cell&#34;时,我遇到了dataTable内部对话框的问题,编辑后的输出文本没有出现,但是当我把数据表编辑放在外面时对话框,它的工作。当我检查数据表的元素 <div class="ui-cell-editor-output" style="display: none;"></div>它是空的,但如果我将数据表edtor放在对话框外,则outPut元素不会为空

让我用一些代码解释一下:

<p:dialog  id="modif" width="80%" widgetVar="w_edit" modal="true" >                    
        <p:tabView  > 
            <p:tab  title="Controle de Réception ">                  
                <h:panelGrid>
                    <p:dataTable id="data1" value="#{normeMicroEBean.listOfNorme(lotRecpBean.currentLotReception.entrant)}" 
                                 var="item" editable="true" editMode="cell" >                           
                        <p:column headerText="Valeur Controle" styleClass="ui-editable-column"> 
                            <p:cellEditor>
                                <f:facet name="output"><h:outputText  value="#{item.valeurControle}" /></f:facet>
                                <f:facet name="input"><p:inputText id="modelInput" value="#{item.valeurControle}" style="width: 50%"/></f:facet>
                            </p:cellEditor>                               
                        </p:column>
                        <p:column width="15%" headerText="Testeur">
                            <p:cellEditor >
                                <f:facet name="output"><h:outputText value="#{item.testeurCR.nom}" /></f:facet>
                                <f:facet name="input">
                                    <h:selectOneMenu value="#{item.testeurCR.nom}" style="width:50%">
                                        <f:selectItems value="#{personnelBean.liste}"   var="perso" itemLabel="#{perso.nom}" itemValue="#{perso}" />
                                    </h:selectOneMenu>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>                                                        
                    </p:dataTable>
                </h:panelGrid>      
            </p:tab>    
        </p:tabView> 
    </p:dialog> 

我希望(像往常一样)你们中的任何人都可以再次救我。

3 个答案:

答案 0 :(得分:0)

所有用户输入必须在表单内。您需要在对话框中添加<h:form>

答案 1 :(得分:0)

当我在对话框中的数据表编辑器中修改行时,我仍然遇到同样的问题,输出文件没有更改仍然具有旧值,但是当我将此数据表放在简单页面中时

    <p:dialog  id="modif" width="80%" widgetVar="w_edit" modal="true" >                    
        <p:tabView  > 
            <p:tab  title="Controle de Réception ">                  
                <h:form>
                   <h:panelGrid>                      
                    <p:dataTable id="data1" value="#{normeMicroEBean.listOfNorme(lotRecpBean.currentLotReception.entrant)}" 
                                 var="item" editable="true" editMode="cell" >                           
                        <p:column headerText="Valeur Controle" styleClass="ui-editable-column"> 
                            <p:cellEditor>
                                <f:facet name="output"><h:outputText  value="#{item.valeurControle}" /></f:facet>
                                <f:facet name="input"><p:inputText id="modelInput" value="#{item.valeurControle}" style="width: 50%"/></f:facet>
                            </p:cellEditor>                               
                        </p:column>
                        <p:column width="15%" headerText="Testeur">
                            <p:cellEditor >
                                <f:facet name="output"><h:outputText value="#{item.testeurCR.nom}" /></f:facet>
                                <f:facet name="input">
                                    <h:selectOneMenu value="#{item.testeurCR.nom}" style="width:50%">
                                        <f:selectItems value="#{personnelBean.liste}"   var="perso" itemLabel="#{perso.nom}" itemValue="#{perso}" />
                                    </h:selectOneMenu>
                                </f:facet>
                            </p:cellEditor>
                        </p:column>                                                        
                    </p:dataTable>
                </h:panelGrid>
             <h:form>
            </p:tab>  
          <p:tab  title="Info lot de Réception">                   
                <h:form>    
                    <p:panelGrid id="idPanel">                                                                                                        
                        <p:row>
                            <p:column><p:outputLabel value="QuantiteLivree:"                   for="quantiteLivree" /></p:column>
                            <p:column><p:inputText id="quantiteLivree" value="#{lotRecpBean.currentLotReception.quantiteLivree}" title="QuantiteLivree" /></p:column>
                            <p:column><p:outputLabel  value="QuantiteRecue:" for="quantiteRecue" /></p:column>
                            <p:column><p:inputText id="quantiteRecue" value="#{lotRecpBean.currentLotReception.quantiteRecue}" title="QuantiteRecue" /></p:column>
                            <p:column><p:outputLabel value="NumBonLivraison:" for="numBonLivraison" /></p:column>
                            <p:column><p:inputText id="numBonLivraison" value="#{lotRecpBean.currentLotReception.numBonLivraison}" title="NumBonLivraison" /></p:column>                          
                        </p:row>                                                                                                                                    
                    </p:panelGrid>                        
                    <div>
                        <p:commandButton action="#{lotRecpBean.update()}" value="Enregistrer" styleClass="button"
                                         style="float: right" oncomplete="PF('lotRecepTable').filter();PF('w_edit').hide();" />               
                    </div>  
                </h:form>
            </p:tab>    
        </p:tabView> 
    </p:dialog> 

答案 2 :(得分:0)

我解决了问题,它来自datatable ===&gt;的值。数据表编辑器的值必须是一个列表,而不是一个返回列表数据表编辑器的方法只使用列表1 -

 <p:dataTable id="data1" value="#{normeMicroEBean.listOfNorme}" 
                             var="item" editable="true" editMode="cell" >  

我在托管bean中创建一个列表,然后在按钮中执行该方法以填充在托管bean中创建的列表。谢谢你的回复