0

AjaxとPrimeFacesで問題が発生しています。

ページが何をすべきか:

-ユーザーが「Cas1」と「Cas2」のどちらかを選択(ラジオボタン)

-ケースが検証されると、Ajaxクエリは「cas1」に1つの入力テキスト領域を表示し、「cas2」にいくつかの入力テキスト領域を表示する必要があります。入力テキスト領域のテキストはデータベースに保存する必要があります

実際に何が起こるか:

-ユーザーは「Cas1」と「Cas2」のどちらかを選択します

-入力テキスト領域は、最初は正しく表示され、「Cas1」と「Cas2」を切り替えても再び変更されることはありません。また、テキストはデータベースに保存されません。

別々に(ラジオボタンなしで)、「Cas1」と「Cas2」の両方が正しく機能します

これが私が使用しているコードです:

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

誰かがページを更新してテキストを保存しようとするのを手伝ってもらえますか?

4

1 に答える 1

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>
于 2012-12-06T18:37:03.850 に答える