IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Problem reRender a4j:support


Sujet :

JSF Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut Problem reRender a4j:support
    bonjour tous le monde,

    j'ai un rich:comboBox dans un onglet en fonction de la valeur saisie il activent, ou désactivent un onglet, mon problème c'est que quand je rafraichie avec l'attribut reRender rien ne se passe, mais quand je met le tout dans un outputPanel ca marche, revers de la médaille tous les valeurs de mes champs sont réinitialiser (a vide).

    le code du comboBox:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <rich:comboBox selectFirstOnUpdate="false" id="#{element.id}"
    	enableManualInput="false" required="#{element.required}"
    	enabled="#{element.enabled}" visible="#{element.visible}"
    	value="#{element.value}" 
    	defaultLabel="#{msg.PleaseEnter}">
    	<a4j:support event="onselect" ajaxSingle="true"
    			actionListener="#{PageBean.updateValues}"
    			reRender="#{element.reRender}" />
    	<f:selectItems value="#{element.values}" />
    </rich:comboBox>
    savez vous comment je peut dégriser, ou comment faire un reRender sans perdre les valeurs saisie par l'utilisateur,

    Un grand merci d'avance

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    le bean est dans quel scope??
    le code du composant que tu veux rafraichir

  3. #3
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    mon bean est en scope session, et voila le code du composant que je veut rafraichire,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <rich:tab label="#{crc.title}" styleClass="label" id="#{crc.id}"
     disabled="#{!crc.value.enabled}" rendered="#{crc.value.visible}">
    </rich:tab>

  4. #4
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    entoure le tabPanel d'un a4j:outputPanel et fait le reRender du a4j:outputPanel.

  5. #5
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    j'ai essayer mais le composant ne s'affiche pas lorsque je l'entoure d'un a4j:outputPanel.

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Ce n'est pas à cause de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rendered="#{crc.value.visible}"
    fais un reRender sur un compoasnt qui est toujours présent dans DOM, par exemple si tu as des tabs présents suivant une condition, fait le reRender sur et ajoute

  7. #7
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    Sniper ce que tu dit est parfaitement correcte, j'arrive a rafraichir le rich:tab depuis le rich:tabPanel (composant parent), mais c'est toujours le même problème de mes inputText et radio bouton qui sont réinitialiser,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <rich:tabPanel switchType="ajax" id="#{PageBean.product.id}">
    pour ce qui est de la valeur de visible elle est bien a true.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rendered="#{crc.value.visible}"
    Edit:
    le problème vient du fait que je passe dans mon comboBox l'attribut ajaxSingle à true ,ce qui a la fâcheuse tendance de me réinitialiser les valeurs soumises par l'utilisateur, sauf bien sur pour les composant qui ne sont pas concerné par le ajaxSingle,en même temps j'aimerai exécuter les actions sans avoir a saisir les champs obligatoire????

  8. #8
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    Citation Envoyé par Seiphir0the Voir le message
    le problème vient du fait que je passe dans mon comboBox l'attribut ajaxSingle à true ,ce qui a la fâcheuse tendance de me réinitialiser les valeurs soumises par l'utilisateur, sauf bien sur pour les composant qui ne sont pas concerné par le ajaxSingle,
    ajaxSingle= true -> seul le composant qui envoit la requete ajax passera le traitement des phases JSF.
    Citation Envoyé par Seiphir0the Voir le message
    en même temps j'aimerai exécuter les actions sans avoir a saisir les champs obligatoire????
    pour çà ajoute immediate ="true".

  9. #9
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    j'ai essayer l'attribut immediate ="true" mais il zappe le "value applying", ce qui fait que je trouve uniquement la valeur n-1, il faut passer par un aller retour dans les onglets pour activer le "value applying",

  10. #10
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    + ajaxSingle="false"

  11. #11
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    même avec ajaxSingle="false" ça ne donne rien, bilan ça s'exécute mais toujours pas de value applying. les valeurs sont a null,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <rich:comboBox selectFirstOnUpdate="false" enableManualInput="false"
    	required="#{element.value.required}" enabled="#{element.value.enabled}"
    	id="#{element.id}" visible="#{element.value.visible}"
    	value="#{element.value.value}" width="#{element.value.size}"
    	defaultLabel="#{msg.PleaseEnter}">
    	<a4j:support event="onselect" immediate="true" ajaxSingle="false"
    			actionListener="#{PageBean.updateValues}"
    			reRender="#{element.reRender}" />
    	<f:selectItems value="#{element.values}" />
    </rich:comboBox>

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    et le code des autres valeurs?

  13. #13
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    J'affiche dynamiquement les composants dans une page jsf,

    voila le code de la page:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
     
    	<rich:tabPanel switchType="ajax" id="#{PageBean.product.id}">
    		<c:forEach var="crc" items="#{PageBean.product.caracteristics}">
     
    			<rich:tab label="#{crc.title}" styleClass="label" id="#{crc.id}"
    				disabled="#{!crc.value.enabled}" rendered="#{crc.value.visible}"
    				switchType="ajax">
    				<h:panelGrid columns="#{crc.columns}">
    					<c:forEach var="element" items="#{crc.elements}">
    						<c:choose>
    							<c:when test="${element.className eq 'ElementSpacer'}">
    								<rich:spacer />
    							</c:when>
    							<c:otherwise>
    								<h:outputLabel for="#{element.id}"
    									rendered="#{element.value.visible}"
    									value="#{element.value.label}" styleClass="label" />
    							</c:otherwise>
    						</c:choose>
    						<c:choose>
    							<!--				String            -->
    							<c:when test="${element.className eq 'ElementString'}">
    								<h:inputText styleClass="textInputGradient" id="#{element.id}"
    									required="#{element.value.required}"
    									disabled="#{!element.value.enabled}"
    									rendered="#{element.value.visible}"
    									size="#{element.value.size}" value="#{element.value.value}">
    									<c:if test="#{element.control}">
    										<a4j:support event="onblur"
    											actionListener="#{PageBean.updateValues}" reRender="frOutput" />
    									</c:if>
    									<c:if
    										test="#{element.value.min != null || element.value.max !=null}">
    										<f:validateLength minimum="#{element.value.min}"
    											maximum="#{element.value.max}" />
    									</c:if>
    								</h:inputText>
    							</c:when>
    							<!--				Date            -->
     
    							<c:when test="${element.className eq 'ElementDate'}">
    								<rich:calendar datePattern="#{element.value.pattern}"
    									value="${element.value.value}" id="#{element.id}"
    									required="#{element.value.required}"
    									disabled="#{!element.value.enabled}"
    									rendered="#{element.value.visible}"
    									styleClass="textInputGradient">
    									<c:if test="#{element.control}">
    										<a4j:support event="onblur"
    											actionListener="#{PageBean.updateValues}" reRender="frOutput" />
    									</c:if>
    								</rich:calendar>
    							</c:when>
    							<!--				Integer            -->
    							<c:when test="${element.className eq 'ElementInteger'}"
    								value="${element.value.value}">
    								<h:inputText size="#{element.value.size}" id="#{element.id}"
    									required="#{element.value.required}"
    									enabled="#{element.value.enabled}"
    									rendered="#{element.value.visible}"
    									styleClass="textInputGradient">
    									<c:if test="#{element.control}">
    										<a4j:support event="onblur"
    											actionListener="#{PageBean.updateValues}" reRender="frOutput" />
    									</c:if>
    									<c:if
    										test="#{element.value.min != null || element.value.max !=null}">
    										<f:validateLongRange maximum="#{element.value.max}"
    											minimum="#{element.value.min}" />
    									</c:if>
    								</h:inputText>
    							</c:when>
    							<!--				Real            -->
    							<c:when test="${element.className eq 'ElementReal'}"
    								value="${element.value.value}">
    								<h:inputText size="#{element.value.size}"
    									required="#{element.value.required}" id="#{element.id}"
    									enabled="#{element.value.enabled}"
    									visible="#{element.value.visible}"
    									styleClass="textInputGradient">
    									<c:if
    										test="#{element.value.min != null || element.value.max !=null}">
    										<f:validateDoubleRange maximum="#{element.value.max}"
    											minimum="#{element.value.min}" />
    									</c:if>
    									<c:if test="#{element.control}">
    										<a4j:support event="onblur"
    											actionListener="#{PageBean.updateValues}" reRender="frOutput" />
    									</c:if>
    								</h:inputText>
    							</c:when>
    							<!--				Liste            -->
    							<c:when test="${element.className eq 'ElementList'}">
    								<rich:comboBox selectFirstOnUpdate="false"
    									enableManualInput="false" required="#{element.value.required}"
    									enabled="#{element.value.enabled}" id="#{element.id}"
    									visible="#{element.value.visible}"
    									value="#{element.value.value}" width="#{element.value.size}"
    									defaultLabel="#{msg.PleaseEnter}">
    									<c:if test="#{element.control}">
    										<a4j:support event="onselect" immediate="true"
    											ajaxSingle="false" actionListener="#{PageBean.updateValues}"
    											reRender="#{element.reRender}" />
    									</c:if>
    									<f:selectItems value="#{element.values}" />
    								</rich:comboBox>
    							</c:when>
    							<!--				Radio           -->
    							<c:when test="${element.className eq 'ElementRadio'}">
    								<h:selectOneRadio required="#{element.value.required}"
    									readonly="#{element.value.enabled}" id="#{element.id}"
    									rendered="#{element.value.visible}"
    									value="#{element.value.value}" layout="#{element.layout}">
    									<f:selectItems value="#{element.values}" />
    									<c:if test="#{element.control}">
    										<a4j:support event="onclick" immediate="true"
    											actionListener="#{PageBean.updateValues}"
    											reRender="#{element.reRender}" />
    									</c:if>
    								</h:selectOneRadio>
    							</c:when>
    							<!--				Select           -->
    							<c:when test="${element.className eq 'ElementSelect'}">
    								<h:selectManyCheckbox readonly="#{element.value.enabled}"
    									rendered="#{element.value.visible}" id="#{element.id}"
    									required="#{element.value.required}" layout="#{element.layout}"
    									value="#{element.value.value}">
    									<f:selectItems value="#{element.values}" />
    									<c:if test="#{element.control}">
    										<a4j:support event="onclick"
    											actionListener="#{PageBean.updateValues}"
    											reRender="#{element.reRender}" />
    									</c:if>
    								</h:selectManyCheckbox>
    							</c:when>
    							<!--     			Spacer           -->
    							<c:when test="${element.className eq 'ElementSpacer'}">
    								<rich:spacer />
    							</c:when>
    							<!--				Label            -->
    							<c:when test="${element.className eq 'ElementLabel'}">
    							</c:when>
    							<c:otherwise>
    								<h:inputText id="#{element.id}" size="#{element.value.size}"
    									required="#{element.value.required}"
    									enabled="#{element.value.enabled}"
    									visible="#{element.value.visible}"
    									styleClass="textInputGradient" />
    							</c:otherwise>
    						</c:choose>
    					</c:forEach>
    				</h:panelGrid>
    				<rich:messages showDetail="false" showSummary="true" layout="table"
    					styleClass="message">
    					<f:facet name="errorMarker">
    						<h:graphicImage value="/icons/error.gif" />
    					</f:facet>
    				</rich:messages>
    			</rich:tab>
     
    		</c:forEach>
    	</rich:tabPanel>

  14. #14
    Rédacteur

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    4 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 184
    Par défaut
    en utilisant des <c:if />

    Si le composant n'est pas présent dans le DOM, il ne sera pas réactualisé..pourquoi tu n'utilise pas le rendered des composants JSF.
    avec des test en EL..
    ça m'a l'air un peu compliqué ton code

  15. #15
    Membre averti
    Inscrit en
    Mars 2009
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 59
    Par défaut
    oui mais le composant en question est bien présent, pour faire simple un composant qui ne sera pas présent dans le DOM ne sera jamais actualiser (reRender),
    le c:if n'est la que pour appliquer un contrôle sur les composant qui sont concerné, dans mon cas le comboBox qui active le tab:panel,
    le contrôle est bien présent du fait qu'il appel m'as méthode lorsque je sélectionne une valeur, l'onglet aussi est présent et grisée.

  16. #16
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    Je pense avoir actuellement le même problème.

    J'ai une liste déroulante qui doit lancer une action lorsqu'un élément est sélectionné. J'utilise donc un <rich:combobox> avec la propriété immediate="true" car sinon il valide tout mon formulaire et certains autres éléments doivent obligatoirement être remplis pour la validation finale. je récupère l'élément sélectionné dans la combobox pour l'utiliser au cours de l'action.
    Cependant, lors du lancement de mon action, la variable qui doit stocker l'élément de la combobox est systématiquement à null...

    Le problème est dans la propriété immediate et non dans le outputpanel.

    Quelqu'un aurait une solution comment pallier à ce problème ?

  17. #17
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    J'ai trouvé une solution qui règle mon problème... à voir si cela règlera aussi le tient.

    Je n'utilise pas de immediate="true" mais un ajaxSingle="true" dans le <a4j:support> qui se trouve dans mon combobox. Il applique donc l'action correspond à mon composant sans validation...

Discussions similaires

  1. probléme avec <rich:comboBox et <a4j:support
    Par aymenroma dans le forum JSF
    Réponses: 5
    Dernier message: 10/06/2009, 15h02
  2. problème de reRender sur a4j:support
    Par sendoshi dans le forum JSF
    Réponses: 1
    Dernier message: 09/06/2009, 12h13
  3. <a4j:support> + Onchange
    Par helios2092 dans le forum JSF
    Réponses: 9
    Dernier message: 22/05/2008, 10h19
  4. Probleme avec h:selectOneListbox et a4j:support
    Par yoskater dans le forum JSF
    Réponses: 14
    Dernier message: 20/02/2008, 11h56
  5. Problème avec <a4j:support/>
    Par romaintaz dans le forum JSF
    Réponses: 2
    Dernier message: 17/10/2007, 17h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo