多个Ajax干扰PrimeFaces项目

时间:2012-12-06 15:42:14

标签: java ajax primefaces

我遇到了Ajax和PrimeFaces的问题。

页面应该做什么:

- “Cas 1”和“Cas 2”(radiobuttons)之间的用户选择

- 一旦验证了一个案例,Ajax查询应该为“cas 1”显示一个输入文本区域,为“cas 2”显示几个输入文本区域。输入文本区域中的文本应保存在数据库中

真正发生的事情:

- “Cas 1”和“Cas 2”之间的用户选择

- 输入文本区域第一次正确显示,如果在“Cas 1”和“Cas 2”之间切换,则不会再次更改。此外,文本未保存在数据库中。

另外(没有radiobuttons),“Cas 1”和“Cas 2”都能正常工作

以下是我正在使用的代码:

<html xmlns="http://www.w3.org/1999/xhtml" 
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:p="http://primefaces.org/ui"
  xmlns:f="http://java.sun.com/jsf/core"
  xmlns:ui="http://java.sun.com/jsf/facelets"
  xmlns:c="http://java.sun.com/jsp/jstl/core">

<h:body>
    <h:form id="form">

        <p:messages id="messages" showDetail="true" autoUpdate="true"/>

        <h:panelGrid columns="1" >
            <h:outputText value="Cas 1 : sélection « travail identique pour l’ensemble des CDC » ou un seul CDC" />
            <h:outputText value=" " />
            <h:outputText value="Cas 2 : sélection « travail différent suivant les CDC »" /> 

            <p:selectOneRadio id="CasTrois" value="#{growlBean.casTrois}" required="true"> 
                <f:selectItem itemLabel="Cas 1" itemValue="1" />                               
                <f:selectItem itemLabel="Cas 2" itemValue="2" />
                <p:ajax  event="change" update="displayTrois" />
            </p:selectOneRadio>                                
        </h:panelGrid>

        <h:panelGrid columns="1" id="displayTrois">
            <c:if test="${growlBean.casTrois == 1}">
                <h:outputText value="Expliquer succinctement en quoi consiste l’affaire." />
                <h:outputText value="Donner notamment les informations liées à l’affaire mais ne figurant pas dans les CDC." />
                <h:outputText value=" " />
                <h:outputText value="Exemple" style="font-weight:bold; color: green"/>
                <h:outputText value="Relance en quantité 1 de tous les sous-ensembles de tous les CDC" style="font-weight:bold; color: green"/>
                <h:panelGrid columns="2">
                    <h:panelGrid columns="1">
                        <p:inputTextarea  rows="8" cols="100" required="false" validatorMessage="Le champ doit être rempli"
                                          value="#{growlBean.natureDesTravaux}" autoResize="true"  >
                            <p:ajax event="keyup" listener="#{growlBean.setNatureDesTravaux(natureDesTravaux)}"/>
                        </p:inputTextarea>  
                    </h:panelGrid>                                       
                </h:panelGrid>
            </c:if>

            <c:if test="${growlBean.casTrois == 2}">
                <h:outputText value="Expliquer succinctement en quoi consiste l’affaire." />
                <h:outputText value="Donner notamment les informations liées à l’affaire mais ne figurant pas dans les CDC." /> 
                <p:dataTable id="TableauNatrureTravaux" value="#{growlBean.listCdcAffaire2}" var="detailCdc" >
                    <f:facet name="header">
                        <h:outputText value="Nature des Travaux"/>
                    </f:facet>
                    <p:column >
                        <h:panelGrid columns="1">
                            <p:outputLabel for="textTravaux" value="#{detailCdc.cdcId.outillageId.numeroOutil} #{detailCdc.cdcId.outillageId.designation}" />
                            <p:inputTextarea id="textTravaux" rows="8" cols="100" value="#{detailCdc.natureTravauxPourFla}"      
                                             autoResize="true" required="false" validatorMessage="test" >
                                <f:validateLength minimum="1" />
                                <p:ajax event="keyup" listener="#{detailCdc.setNatureTravauxPourFla(natureTravauxPourFla)}"/>
                            </p:inputTextarea>
                        </h:panelGrid> 
                    </p:column>  
                </p:dataTable>
            </c:if>
        </h:panelGrid>               

    </h:form>        
</h:body> 

有人可以帮我刷新页面并保存文字吗?

1 个答案:

答案 0 :(得分:0)

要让单选按钮正常工作,请将displayTrois元素更改为以下内容(如果这不解决它,则需要发布bean信息并包含监听器):

<p:panel id="displayTrois">
<h:panelGrid columns="1" rendered="${growlBean.casTrois == 1}">
            <h:outputText value="Expliquer succinctement en quoi consiste l’affaire." />
            <h:outputText value="Donner notamment les informations liées à l’affaire mais ne figurant pas dans les CDC." />
            <h:outputText value=" " />
            <h:outputText value="Exemple" style="font-weight:bold; color: green"/>
            <h:outputText value="Relance en quantité 1 de tous les sous-ensembles de tous les CDC" style="font-weight:bold; color: green"/>
            <h:panelGrid columns="2">
                <h:panelGrid columns="1">
                    <p:inputTextarea  rows="8" cols="100" required="false" validatorMessage="Le champ doit être rempli"
                                      value="#{growlBean.natureDesTravaux}" autoResize="true"  >
                        <p:ajax event="keyup" listener="#{growlBean.setNatureDesTravaux(natureDesTravaux)}"/>
                    </p:inputTextarea>  
                </h:panelGrid>                                       
            </h:panelGrid>


    </h:panelGrid>
    <h:panelGrid columns="1" rendered="${growlBean.casTrois == 2}">
            <h:outputText value="Expliquer succinctement en quoi consiste l’affaire." />
            <h:outputText value="Donner notamment les informations liées à l’affaire mais ne figurant pas dans les CDC." /> 
            <p:dataTable id="TableauNatrureTravaux" value="#{growlBean.listCdcAffaire2}" var="detailCdc" >
                <f:facet name="header">
                    <h:outputText value="Nature des Travaux"/>
                </f:facet>
                <p:column >
                    <h:panelGrid columns="1">
                        <p:outputLabel for="textTravaux" value="#{detailCdc.cdcId.outillageId.numeroOutil} #{detailCdc.cdcId.outillageId.designation}" />
                        <p:inputTextarea id="textTravaux" rows="8" cols="100" value="#{detailCdc.natureTravauxPourFla}"      
                                         autoResize="true" required="false" validatorMessage="test" >
                            <f:validateLength minimum="1" />
                            <p:ajax event="keyup" listener="#{detailCdc.setNatureTravauxPourFla(natureTravauxPourFla)}"/>
                        </p:inputTextarea>
                    </h:panelGrid> 
                </p:column>  
            </p:dataTable>
    </h:panelGrid>   
</p:panel>