Les composants de valeur perdus au cours de l'ajax de mise à jour
Je suis à l'aide de PrimeFaces 3.3.1 et JSF 2.0 et le serveur utilisé est Oracle Weblogic 11gR1
Ci-dessous mon code.
<p:panel id="personDetailsPanelId" header="#{msg.personDetails}">
<!-- Radio Button -->
<h:panelGrid columns="3" style="align:center">
<h:outputText value="#{msg.accountCategory}" />
<p:spacer width="10px" />
<p:selectOneRadio id="singleJointAccountRadioId"
layout="horizontal"
value="#{captureAccountDetailBackingBean.accountCategory}">
<f:selectItems
value="#{captureAccountDetailBackingBean.accountcategoryList}">
</f:selectItems>
<p:ajax process="@this" event="change" update="@form"
partialSubmit="true" />
</p:selectOneRadio>
</h:panelGrid>
<p:spacer height="30px;" />
<h:panelGrid id="accountDetailsId" columns="3">
<h:panelGrid id="firstAccountHolderId" columns="2"
styleClass="float-left ">
<p:graphicImage
value="/com/cas/pages/common/images/person_icon.jpg" />
<h:outputText value="#{msg.firstAccountHolder}" />
<!-- Person Name -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.nameofPerson}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputText
value="#{captureAccountDetailBackingBean.accountHolder1.personName}"
size="25" required="true" />
<!-- Person Address -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.address}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputTextarea
value="#{captureAccountDetailBackingBean.accountHolder1.personAddress}"
rows="3" autoResize="false" required="true" />
<!-- DOB -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.dateOfBirth}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:calendar
value="#{captureAccountDetailBackingBean.accountHolder1.personDOB}"
navigator="true" showOn="button" size="6" required="true"
pattern="dd/MM/yyyy" />
<!-- Age -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.age}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputText
value="#{captureAccountDetailBackingBean.accountHolder1.personAge}"
size="2" required="true" />
</h:panelGrid>
<p:spacer width="130px;" />
<h:panelGrid id="secondAccountHolderId" columns="2"
styleClass="float-left"
rendered="#{captureAccountDetailBackingBean.accountCategory eq 'Joint'}">
<p:graphicImage
value="/com/cas/pages/common/images/person_icon.jpg" />
<h:outputText value="#{msg.secondAccountHolder}" />
<!-- Person Name -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.nameofPerson}" style="font-size:15px;" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputText
value="#{captureAccountDetailBackingBean.accountHolder2.personName}"
styleClass="inputText-style" size="25" required="true" />
<!-- Person Address -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.address}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputTextarea
value="#{captureAccountDetailBackingBean.accountHolder2.personAddress}"
rows="3" autoResize="false" styleClass="inputText-style"
size="25" required="true" />
<!-- DOB -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.dateOfBirth}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:calendar
value="#{captureAccountDetailBackingBean.accountHolder2.personDOB}"
navigator="true" showOn="button" size="6"
styleClass="inputText-style" required="true" />
<!-- Age -->
<h:panelGrid columns="2">
<h:outputText value="#{msg.age}" />
<span style="color: red;">*</span>
</h:panelGrid>
<p:inputText
value="#{captureAccountDetailBackingBean.accountHolder2.personAge}"
size="2" styleClass="inputText-style" required="true" />
</h:panelGrid>
</h:panelGrid>
<div style="clear: both;" />
</p:panel>
Backing bean code:
public class CaptureAccountDetailBackingBean {
//For Radio Button
SelectItem[] accountcategoryList = {new SelectItem("Single", "Single"), new SelectItem("Joint","Joint")};
String accountCategory;
AccountHolderDetailVO accountHolder1 = new AccountHolderDetailVO();
AccountHolderDetailVO accountHolder2 = new AccountHolderDetailVO();
//setter and getters
}
AccountHolderDetailVO
public class AccountHolderDetailVO {
String personName;
String personAge;
Date personDOB;
String personAddress;
//getter and setter
}
Par défaut, le bouton radio sélectionné est "Unique". Et "secondAccountHolderId" panelgrid est affiché lorsque l'utilisateur de cliquer sur "Joint" bouton radio.
Quand j'ai entrer les valeurs dans la "firstAccountHolderId" ou "secondAccountHolderId" panelgrid et changer le bouton radio, les valeurs saisies sont perdues.
Quelle est la portée de votre backing bean? Que voulez-vous dire "perdu"? Perdu à quoi? un backing bean méthode? une mise à jour basé sur ajax? Votre incroyablement grand
<h:form/>
avec de nombreux composants en cela conduira à la lenteur des réactions et général de chagrin lors du débogage de votre vue JSF. Casser en petits morceaux avec des formes plus petites.
OriginalL'auteur Kumar | 2013-01-06
Vous devez vous connecter pour publier un commentaire.
Ici,
vous êtes essentiellement en disant JSF à présenter (processus) seul le courant de champ (et donc pas tous les autres champs du formulaire!) et puis de re-rendre (mise à jour) le ensemble forme (et donc y compris tous les autres champs qui n'ont pas été soumis/traité!).
Donc, tous les autres champs sont tout simplement l'affichage des valeurs initiales de la fève à la place des valeurs qui ont été saisies, mais pas soumis.
Vous avez besoin de changer
update="@form"
en conséquence qu'il met à jour uniquement les composants qui vraiment doit être mis à jour en fonction de la variation du bouton radio. E. g.Voir aussi:
OriginalL'auteur BalusC