0

チェックボックス選択機能でデータテーブルを使用しますが、いくつかの行を選択した後にフッターボタンをクリックすると、それらの行はオブジェクト selectedCommandes[] に影響しません。その証拠は、メソッドに行を追加したことです。 selectedCommandes[] の長さですが、0 が返されます。理由はわかりません。すべてのコードが適切であると思います。ここにデータテーブルがあります。

<p:dataTable id="cars" var="car" value="#{commandesUserController.mediumCommandesModel}" selection="#{commandesUserController.selectedCommandes}"  tableStyle="width:auto">  


                <f:facet name="header">  
                    Checkbox Based Selection  
                </f:facet>  

                <p:column selectionMode="multiple" style="width:18px" />  

                <p:column headerText="Model" style="width:100px">  
                    <h:outputText value="#{car.id}" />  
                </p:column>  

                <p:column headerText="Year" style="width:100px">  
                    <h:outputText value="#{car.dateEnvoi}" />  
                </p:column>  

                <p:column headerText="Manufacturer" style="width:100px">  
                    <h:outputText value="#{car.dateLivraisonRecommande}" />  
                </p:column>  

                <p:column>
                    <p:commandLink ajax="false" value="Editer" action="updateUser_v1" >
                        <f:setPropertyActionListener value="#{car}" target="#{editUserController.u1}" />  
                    </p:commandLink>
                </p:column>

                <p:column>
                    <p:commandLink  value="Supprimer" oncomplete="confirmation.show()" >
                        <f:setPropertyActionListener value="#{car}" target="#{commandesUserController.selectedCommande}" />  
                    </p:commandLink>
                </p:column>

                <p:column style="width:40px">                         
                    <p:commandButton id="selectButton" update=":myform:carDlg" oncomplete="carDialog.show()" icon="ui-icon-search" title="View">  
                        <f:setPropertyActionListener value="#{car}" target="#{commandesUserController.selectedCommande}" />  
                    </p:commandButton>                       
                </p:column>  


                <f:facet name="footer">  
                    <p:commandButton id="supprion" value="supprimer selection"   oncomplete="confirmation2.show()"   />  
                </f:facet>

            </p:dataTable>  

ここに問題があるボタンがあります:

<f:facet name="footer">  
                    <p:commandButton id="supprion" value="supprimer selection"   oncomplete="confirmation2.show()"   />  
                </f:facet>

上のボタンをクリックすると表示されるダイアログは次のとおりです。

<p:confirmDialog id="confirmDialog2" message="etes vous sur de vouloir supprimer ces commande avec tous les données et fichiers correspondants !"  
                             header="confirmation de suppression" severity="alert" widgetVar="confirmation2">  

                <p:commandButton id="confirm2" value="oui" update="cars" oncomplete="confirmation2.hide()"  
                                 action="#{commandesUserController.deleteCommandes()}" />  
                <p:commandButton id="decline2" value="non" onclick="confirmation2.hide()" type="button" />   

            </p:confirmDialog> 

そしてここに managedBean のメソッドがあります:

public String deleteCommandes(){
   System.out.println("je suis dans delete l ensemble avec tous    =   "+selectedCommandes.length);
   for(int j = 0;j<selectedCommandes.length;j++){
      selectedCommandes[j].setListFichiers(uh.getFichiersById(this.selectedCommandes[j].getId()));
       for(int i = 0; i<selectedCommandes[j].getListFichiers().size();i++){
       //System.out.println("alors "+selectedCommande.getListFichiers().get(i).getId());
       uh.deleteFichier(selectedCommandes[j].getListFichiers().get(i));
   }
   uh.deleteCommande(selectedCommandes[j]);
   }


    return "commandesUser";

}

この行: System.out.println("je suis dans delete l ensemble avec tous = "+selectedCommandes.length); 常に 0 を返す

SelectableDataModel を実装するクラスを既に作成しました

問題を説明したことを願っています

何か考えはありますか ありがとう

4

3 に答える 3

0

h:form周りに配置はありますp:dataTableか?そうでない場合は、おそらくこれが問題の原因です。

PrimeFacesのショーケースページでは、構造は次のようになります。

<h:form>
    <p:dataTable>
        <!-- content of data table -->
    </p:dataTable>

    <p:confirmDialog>
        <!-- content of dialog -->
    </p:confirmDialog>
</h:form>

とを別の形式にするp:dataTableと、p:confirmDialogうまくいくはずです。

<h:form>
    <p:dataTable>
        <!-- content of data table -->
    </p:dataTable>
</h:form>
<h:form>
    <p:confirmDialog>
        <!-- content of dialog -->
    </p:confirmDialog>
</h:form>

のセッターにブレークポイントを設定して、selectedCommandesこれが呼び出されているかどうかを確認できます。(セッターが複数回呼び出されるので心配しないでください。これは正常です。)

于 2012-08-22T12:57:34.430 に答える
0

追加 <p:ajax event="cellEdit" listener="#{tableBean.onCellEdit}" update=":form:messages" />

<p:datatTable>

于 2014-04-23T15:44:17.070 に答える
0

あなたが私に言ったように、私は2つのフォームと別のページでテストしました:これが新しいxhtmlページです:

    <?xml version='1.0' encoding='UTF-8' ?>
<!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:ui="http://java.sun.com/jsf/facelets"
      xmlns:p="http://primefaces.org/ui"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">

    <body>

        <ui:composition template="./template_utilisateur.xhtml">

            <ui:define name="tohead">             
            </ui:define>
            <ui:define name="content">


                Bienvenue #{userController.u1.nom} #{userController.u1.prenom}
                <br></br><br></br><br></br>
                <h:form id="form">                     

                    <p:dataTable id="cars" var="car" value="#{acceuilUserController.lc_maj}"  tableStyle="width:auto" rowStyleClass="#{(car.lu == false) ? 'red' : null}" >  

                        <p:column headerText="Commande N° : " style="width:100px">  
                            <h:outputText value="#{car.commande.id}" />  
                        </p:column>  

                        <p:column headerText="Date de mise à jour : " style="width:100px">  
                            <h:outputText value="#{car.dateMaj}" />  
                        </p:column> 

                        <p:column headerText="Decision : " style="width:100px">  
                            <h:outputText value="#{car.decison}" />  
                        </p:column> 

                        <p:column headerText="Etat : " style="width:100px">  
                            <h:outputText value="#{car.etat}" />  
                        </p:column> 

                        <p:column style="width:40px">                         
                            <p:commandButton  id="selectButton"  update=":form:carDlg" oncomplete="carDialog.show()" icon="ui-icon-search" title="plus de détails">  
                                <f:setPropertyActionListener value="#{car}" target="#{acceuilUserController.selectedMajCommande}" />  
                            </p:commandButton>                       
                        </p:column> 

                    </p:dataTable>                    

                    <p:dialog header="Commande editée le #{acceuilUserController.selectedMajCommande.dateMaj} par l'#{acceuilUserController.selectedMajCommande.utilisateur.type} #{acceuilUserController.selectedMajCommande.utilisateur.nom} #{acceuilUserController.selectedMajCommande.utilisateur.prenom}" widgetVar="carDialog" resizable="false" id="carDlg"  
                              showEffect="fade" hideEffect="explode" modal="true">  

                        <f:ajax event="close" execute="@this" render="cars" listener="#{acceuilUserController.refreshDatatable()}"/>
                        <table id="gradient-style" >
                            <tr style="border: hidden;">
                                <th>
                                    <h:outputLabel value="Model:" />
                                </th>
                                <td>
                                    <h:outputLabel style="font-weight: bold;" value="#{acceuilUserController.selectedMajCommande.commande.id}" />
                                </td>                                       
                            </tr>
                            <tr style="border: hidden;">
                                <th>
                                    <h:outputLabel value="Year:" />
                                </th>
                                <td>
                                    <h:outputLabel style="font-weight: bold;" value="#{acceuilUserController.selectedMajCommande.commande.etat}" />
                                </td>                                       
                            </tr>
                            <tr style="border: hidden;">
                                <th>
                                    <h:outputLabel value="Manufacturer:" />
                                </th>
                                <td>
                                    <h:outputLabel style="font-weight: bold;" value="#{acceuilUserController.selectedMajCommande.commande.dateEnvoi}" />
                                </td>                                       
                            </tr>
                            <tr style="border: hidden;">
                                <th>

                                    <h:outputLabel value="Color:" />
                                </th>
                                <td>
                                    <h:outputLabel style="font-weight: bold;" value="#{acceuilUserController.selectedMajCommande.commande.dateLivraisonRecommande}" />
                                </td>                                       
                            </tr>
                        </table>
                        <table id="gradient-style" >
                            <th>Nom Fichier</th><th>Taille</th><th>Télécharger</th>
                            <ui:repeat value="#{acceuilUserController.selectedMajCommande.commande.listFichiers}" var="jjjjj">
                                <tr>
                                    <td>
                                        <h:outputLabel style="font-weight: bold;" value="#{jjjjj.nom}" />
                                    </td>
                                    <td>
                                        <h:outputLabel style="font-weight: bold;" value="#{jjjjj.taille}" />
                                    </td>
                                    <td>
                                        <h:commandLink value="Télécharger">
                                            <p:fileDownload value="#{jjjjj.convertFichier}" />                                            
                                        </h:commandLink>

                                    </td>
                                </tr>

                            </ui:repeat>

                        </table>

                    </p:dialog>  

                </h:form> 


            </ui:define>

        </ui:composition>

    </body>
</html>

そして、ここに selectedCommandes からの set メソッドがあります:

public void setSelectedCommandes(Commande[] selectedCommandes) {
    System.out.println("je suis la dans son set tous                     :     :"+selectedCommandes.length);
    this.selectedCommandes = selectedCommandes;
}

1行をチェックすると、上記のメソッドが実行されず、クリックしたときに1回だけ実行されることに気付きました:

<f:facet name="footer">  
                <p:commandButton id="supprion" value="supprimer selection" update=":form2:displayMulti"  oncomplete="confirmation2.show()"   />  
            </f:facet>

データテーブルへのフッターで、それは書かれています:

 Infos: je suis la dans son set tous                     :     :0

何かわかりますか、ありがとう

于 2012-08-23T20:28:38.997 に答える