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>

我现在有一个小问题:对话中的命令按钮不会触发我尝试过的方法保存

<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 回答