0

データテーブルを埋める2つのドロップダウンリストがあるページがあります(ドロップダウンリストでの選択によって異なります)。データテーブルには、複数の行を選択し、選択した行に基づいて情報を表示するダイアログを開くためのチェックボックスが含まれています。問題は次のとおりです。ボタンを初めてクリックしてダイアログを開くと、空になります。ドロップダウンリストの内容を変更してダイアログを開くと、先ほど選択したものではなく、前に選択した情報が表示されます。ドロップダウンリストなどを変更するまで、その状態を維持します...ドロップダウンリストで行った選択を変更する前に、ダイアログには常に前の選択の情報が表示されます。

ページ:

        <h:form id="form">
    <f:view>

    <p:growl id="msgs" showDetail="true" />
    <p:layout style="min-width:300px;min-height:200px;" id="layout">
        <p:layoutUnit position="west" resizable="true" size="200" minSize="40" maxSize="300">
        <!-- _______________________________________start drop down________________________________________________________ -->
            <h:panelGrid columns="1" cellpadding="5">

                <p:selectOneMenu id="Item" value="#{ThemeBean.idItem}">
                    <f:selectItem itemLabel="Select un Item " itemValue="" />
                    <f:selectItems value="#{ItemBean.listItemsUser}" var="utilisateur" />
                    <p:ajax listener="#{ThemeBean.handleCityChange}" update="suburbs" />
                </p:selectOneMenu>

                <p:selectOneMenu id="suburbs" value="#{ReponseBean.idTheme}">
                    <f:selectItem itemLabel="Select un Theme" itemValue="" />
                    <f:selectItems value="#{ThemeBean.suburbs}" />
                    <p:ajax listener="#{ReponseBean.handleCityChange_Ecart}" update=":form:dropArea" />
                </p:selectOneMenu>

            </h:panelGrid>
            <p:separator />
        </p:layoutUnit>
    <!-- _______________________________________end drop down________________________________________________________ -->
        <p:layoutUnit position="center">

            <p:outputPanel id="dropArea">
                <p:dataTable id="dt1" var="car"
                    value="#{ReponseBean.listPartheme_ecart}"
                    rendered="#{not empty ReponseBean.listPartheme_ecart}"
                    rowKey="#{car.id}" editable="true"
                    selection="#{EcartBean.selectedCars}">

                    <p:column selectionMode="multiple" style="width:18px" />
                    <p:column headerText="Questions">
                        <h:outputText value="#{car.q1.text}" />
                    </p:column>

                    <p:column headerText="Reponse">
                        <h:outputText value="#{car.rep}" />
                    </p:column>
                    <f:facet name="footer">
                        <p:commandButton id="multiViewButton" value="Ajouter Ecart" icon="ui-icon-search"
                            update=":form:multiDialog :form:displayMulti" oncomplete="multiCarDialog.show()"/>
                    </f:facet>
                </p:dataTable>
                <!-- ________________________________________dialogue________________________________________________ -->
                <p:dialog id="multiDialog" header="Ajout Ecart" widgetVar="multiCarDialog" height="300" showEffect="fade">
                    <p:dataList id="displayMulti" value="#{EcartBean.selectedCars}" var="selectedCare">
                        #{selectedCare.q1.text} (#{selectedCare.rep})
                    </p:dataList>
                    <p:messages />
                    <h:panelGrid columns="3" cellpadding="5">

                        <h:outputLabel value="Niveau Ecart" />

                        <p:selectOneMenu id="idUtilisateur" value="#{EcartBean.idNiveauAudit}">
                            <f:selectItems value="#{NiveauEcartBean.listNiveauSelect}"  var="nivecart" />
                        </p:selectOneMenu>
                        <p:message for="idUtilisateur" />
                        <h:outputLabel value="Constatation" id="Constatation" />
                        <h:inputText value="#{EcartBean.consta}" />
                        <p:message for="Constatation" />
                        <p:commandButton icon="ui-icon-disk" value="Ajouter" id="ViewButton" action="#{EcartBean.save}"
                            oncomplete="multiCarDialog.hide();">
                        </p:commandButton>
                    </h:panelGrid>

                </p:dialog>

            </p:outputPanel>

        </p:layoutUnit>
    </p:layout>

    </f:view>
    </h:form>

メソッドThemeBean.handleCityChange:

    public void handleCityChange() {

    qu = respQue.lister_Ques(idItem);

    if (qu != null) {
        List<SelectItem> listuti = new ArrayList<SelectItem>();
        List<Theme> list = resp.lister_Par_Thme(qu.getId());
        for (Theme p : list) {
            listuti.add(new SelectItem(p.getId(), p.getLibelle()));
        }
        this.setSuburbs(listuti);

    } else {
        System.out.println("erreur");
    }

}

ReponseBean.handleCityChange_Ecart:

    public void handleCityChange_Ecart() {

    listPartheme_ecart= new ArrayList<Reponse>();
    System.out.println("taiile avant "+listPartheme_ecart.size());
    List<Reponse> lr = respQ.findByTheme_ecart(idTheme);
    System.out.println(idTheme);
    for (int i = 0; i < lr.size(); i++) {
        if (lr.get(i).getAudit().getId() == aud.getId())
            listPartheme_ecart.add(lr.get(i));
    }

}

コンソールでは、ダイアログを開いたときに書き込み情報が表示されますが、ダイアログに書き込みが表示されないだけです。お手数をおかけしますが、よろしくお願いいたします。

私はこの投稿を更新して、ポップアップを埋めるという問題を最終的に解決したと言っています。ダイアログを次のような新しい形式で配置しました。

        </h:form>
    <!-- ________________________________________dialogue________________________________________________ -->
    <h:form id="hh" >
    <p:dialog id="multiDialog" header="Ajout Ecart" widgetVar="multiCarDialog" height="300" showEffect="fade">

        <p:dataList id="displayMulti" value="#{EcartBean.selectedCars}" var="selectedCare">
            #{selectedCare.q1.text} (#{selectedCare.rep})
        </p:dataList>
        <p:messages />

            <h:panelGrid columns="3" cellpadding="5">

                <h:outputLabel value="Niveau Ecart" />
                <p:selectOneMenu id="idUtilisateur" value="#{EcartBean.idNiveauAudit}">
                    <f:selectItems value="#{NiveauEcartBean.listNiveauSelect}"  var="nivecart" />
                </p:selectOneMenu>

                <p:message for="idUtilisateur" />
                <h:outputLabel value="Constatation" id="Constatation" />

                <h:inputText value="#{EcartBean.consta}" />
                <p:message for="Constatation" />

                <p:commandButton  icon="ui-icon-disk" value="Ajouter" action="#{EcartBean.save}"  id="ViewButton" oncomplete="multiCarDialog.hide();" />

            </h:panelGrid>

        </p:dialog>
    </h:form>

私は今、1つの小さな問題を抱えています:ダイアログのcommandButtonは、私が試したセーブメソッドを起動しません

<p:commandButton  icon="ui-icon-disk" value="Ajouter" action="#{EcartBean.save}"  id="ViewButton" oncomplete="multiCarDialog.hide();" />

<p:commandButton  icon="ui-icon-disk" value="Ajouter" actionListener="#{EcartBean.save}"  id="ViewButton" oncomplete="multiCarDialog.hide();" />

<p:commandButton  icon="ui-icon-disk" value="Ajouter" id="ViewButton" oncomplete="multiCarDialog.hide();" >
                <f:actionListener  binding="#{EcartBean.save}"/>
                </p:commandButton>

しかし何も:(。どこが間違っているのですか?

4

1 に答える 1

-1

のドキュメントによると<p:ajax>listener貼り付けたコードで発生していない部分的なリクエストでのみトリガーされます。event="valueChange"現在の更新がダイアログに表示される部分的なリクエストをトリガーするために使用します。

<p:ajax event="valueChange" listener="#{ThemeBean.handleCityChange}" update="suburbs" /> 

<p:ajax event="valueChange" listener="#{ReponseBean.handleCityChange_Ecart}" update=":form:dropArea" />
于 2012-08-02T13:27:48.697 に答える