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 :

Plusieurs commandButton - Submit ne marche pas


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut Plusieurs commandButton - Submit ne marche pas
    Bonjour,

    Je rencontre un problème avec JSF pour construire une page avec plusieurs bouton ou liens pour soumettre le formulaire. J'ai une partie de la page qui sert à faire une recherche. Deux critères de recherche sont proposés. Un bouton "Search" permet de soumettre ces deux champs de texte. Ensuite la page est rafraîchie avec une dataTable comportant tous les enregistrements correspondant aux critères de recherche. Dans cette dataTable, je souhaite ajouter 2 commandLink par ligne : un pour renvoyer vers une page de mise à jour de l'enregistrmeent (Update) et un autre pour supprimer l'enregistrement (Delete). Le problème : Quand je clique sur ces liens de la dataTable, la page se rafraîchit mais la méthode du managed bean JSF n'est pas appelée.

    Mon code :

    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
     
    <h:form id="form">
    <table width="100%">
    <tr>
    <td>
    	<fieldset>
    		<legend>Search criteria : </legend>
    		<table>
    			<tr>
    				<td align="right"> <h:outputLabel id="traitCodeLabel" value="Trait code : " for="traitCode" /> </td>
    				<td align="left"> <h:inputText id="traitCode" value="" /> </td>
    				<td> <rich:spacer width="30" /> </td>
    				<td align="right"> <h:outputLabel id="traitDescriptionLabel" value="Trait definition : " for="traitDescription" /> </td>
    				<td align="left"> <h:inputText id="traitDescription" value="" /> </td>
    				<td> <rich:spacer width="30" /> </td>
    				<td> <h:commandButton action="#{traitBean.searchTraits}" value="Search" /> </td>
    			</tr>
    		</table>	
    	</fieldset>
    </td>
    </tr>
    <tr>
    <td>
    	<rich:dataTable id="table" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
    		cellpadding="0" cellspacing="0" width="100%" border="0" var="trait" value="#{traitBean.traits}" rendered="#{traitBean.traits != null}">
     
    		<f:facet name="header">
    			<rich:columnGroup>
    				<rich:column>
    					<h:outputText value="Code" />
    				</rich:column>
    				<rich:column>
    					<h:outputText value="Definition" />
    				</rich:column>
    				<rich:column>
    					<h:outputText value="Update" />
    				</rich:column>
    				<rich:column>
    					<h:outputText value="Delete" />
    				</rich:column>
    			</rich:columnGroup>
    		</f:facet>
     
    		<rich:column>
    			<h:outputText value="#{trait.code}" />
    		</rich:column>
    		<rich:column>
    			<h:outputText value="#{trait.definition}" />
    		</rich:column>
    		<rich:column style="text-align: center">
    			<h:commandLink action="#{traitBean.updateTrait}">
    				<h:outputText value="Update" />
    				<f:setPropertyActionListener value="#{trait}" target="#{traitBean.selectedTrait}" />
    			</h:commandLink>
    		</rich:column>
    		<rich:column style="text-align: center">
    			<h:commandLink action="#{traitBean.deleteTrait}">
    				<h:graphicImage url="/images/croix_supprimer.png" style="border: 0" />
    				<f:setPropertyActionListener value="#{trait}" target="#{traitBean.selectedTrait}" />
    			</h:commandLink>
    		</rich:column>
    	</rich:dataTable>
    </td>
    </tr>
    </table>
    </h:form>

    Si je supprime le premier commandButton "Search" et que j'affiche d'entrée tous mes enregistrements dans la dataTable, alors ces boutons marchent et les méthodes du managed bean sont bien appelées.

    Le problème pourrait-il donc venir du fait qu'il y a deux plusieurs façon de "submiter" le formulaire ?

    Merci d'avance pour votre aide

  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
    et avec a4j:commandLink?

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2009
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 154
    Par défaut
    Comment vérifies-tu que la méthode de ton managed bean n'est pas appellé ? tu as mis un logger au tout début ?
    As-tu géré un forward pour chacun de tes boutons ?

    Sinon tu définis tes titre de colonnes bizarement... mais ça n'a rien à voir avec ton problème.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 143
    Par défaut
    Merci pour vos réponses.

    Avec le a4j:commandLink, ça ne marche pas non plus. Je commence à désespérer. Cela fait deux jours que je cherche une solution. J'ai essayé avec a4j:form avec des reRender, des ajaxSubmit="true". J'ai essayé avec des a4j:commandButton au lieu des h:commandButton. J'ai essayé avec deux forms, un pour la partie recherche, un pour la datatable. Bref ça m'énerve un peu car c'est quelque chose que je sais très bien faire avec un mécanisme Servlet / JSP classique. Je sais qu'un formulaire web ne peux pas avoir plusieurs bouton de type submit. Il suffit donc de créer des boutons ou des liens qui invoque une même méthode javascript qui elle submite le formulaire. Mais avec tous ces frameworks JSF et RichFaces, on n'a plus la main sur la techno sous jacentes... Mon problème viens sûrement du fait que je ne sais pas bien utiliser la techno JSF / RichFaces. Il doit quand même bien y avoir un moyen d'avoir plusieurs contrôles sur ma page permettant de submitter le formulaire !

    Donc pour résumer, ma page est composée de deux parties. Une première visible tout le temps qui permet de renseigner des critères de recherche et de les submitter. Une deuxième partie qui affiche les résultats de la recherche dans une dataTable mais avec des contrôles sur chaque ligne permettant de submitter le formulaire pour rediriger vers une page permettant de mettre à jour l'enregistrement sélectionné.

    @Fafhrd : Pour vérifier si ma méthode est bien appelée, oui effectivement j'ai mis un logger dès la première ligne. Concernant la déclaration des colonnes, j'ai juste pris exemple sur le site de RichFaces qui décrit l'utilisation du composant rich:dataTable. Ensuite je ne comprends pas la question concernant la génération de "forward" pour chacun des boutons.

    Ci-joint le code de ma 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
     
    ...
    <h:form id="searchForm">
    	<fieldset>
    		<legend>Search criteria : </legend>
    		<table>
    			<tr>
    				<td align="right"> <h:outputLabel id="traitCodeLabel" value="Trait code : " for="traitCode" /> </td>
    				<td align="left"> <h:inputText id="traitCode" value="#{traitBean.searchedTraitCode}" /> </td>
    				<td> <rich:spacer width="30" /> </td>
    				<td align="right"> <h:outputLabel id="traitDescriptionLabel" value="Trait definition : " for="traitDescription" /> </td>
    				<td align="left"> <h:inputText id="traitDescription" value="#{traitBean.searchedTraitDefinition}" /> </td>
    				<td> <rich:spacer width="30" /> </td>
    				<td> 
    				<a4j:commandButton type="submit" value="Search" action="#{traitBean.searchTraits}" reRender="resultForm" />
    				</td>
    			</tr>
    		</table>	
    	</fieldset>
    </h:form>
     
    ...
     
    <h:form id="resultForm">
    <rich:dataTable id="traitList" onRowMouseOver="this.style.backgroundColor='#F1F1F1'" 
    onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
    	cellpadding="0" cellspacing="0" width="100%" border="0" var="trait" rows="#{traitBean.rowsPerDataTable}"
    	value="#{traitBean.traits}" >
     
    	<f:facet name="header">
    		<rich:columnGroup>
    			<rich:column>
    				<h:outputText value="Code" />
    			</rich:column>
    			<rich:column>
    				<h:outputText value="Definition" />
    			</rich:column>
    			<rich:column>
    				<h:outputText value="Update" />
    			</rich:column>
    			<rich:column>
    				<h:outputText value="Delete" />
    			</rich:column>
    		</rich:columnGroup>
    	</f:facet>
     
    	<rich:column>
    		<h:outputText value="#{trait.code}" />
    	</rich:column>
    	<rich:column>
    		<h:outputText value="#{trait.definition}" />
    	</rich:column>
    	<rich:column style="text-align: center">
    		<a4j:commandLink action="#{traitBean.updateTrait}">
    			<h:outputText value="Update" />
    			<f:setPropertyActionListener value="#{trait}" target="#{traitBean.selectedTrait}" />
    		</a4j:commandLink>
    	</rich:column>
    	<rich:column style="text-align: center">
     
    	</rich:column>
    </rich:dataTable>
    <rich:datascroller id="dtsc" align="center" for="traitList" page="#{traitBean.scrollerPage}"  />
    </h:form>
    La soumission du formulaire avec le bouton Search marche et appelle bien la méthode searchTraits. Par contre lorsque je clique sur les liens "Update" de ma dataTable, la méthode updateTrait n'est pas appelée.

    Merci d'avance pour votre aide.

  5. #5
    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
    utilise un seul form pour la page, regarde dans le faq comment loguer les phases JSF, tu saura comme ça dans quelle phase la requete se bloque.

  6. #6
    Membre éclairé Avatar de mLk92
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    527
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 527
    Par défaut
    sinon essaie un actionListener plutôt qu'un action

Discussions similaires

  1. submit ne marche pas sous FF
    Par gloglo dans le forum Général JavaScript
    Réponses: 20
    Dernier message: 01/10/2008, 11h51
  2. Réponses: 8
    Dernier message: 19/03/2008, 19h08
  3. this.form.submit ne marche pas ... et pourtant
    Par misarod dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 21/12/2005, 17h40
  4. document.monForm.submit(); ... marche pas
    Par FrankOVD dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/10/2005, 16h13
  5. onChange="this.form.submit();" marche pas sous IE
    Par Death83 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/09/2005, 11h05

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