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 :

ModalPanel et navigation


Sujet :

JSF Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut ModalPanel et navigation
    Bonjour,

    Je fais ma premiere appli en JSF et je tombe sur un petit problème.
    Je souhaite inserer dans une liste déroulante une nouvelle entrée provenant d'un formulaire situé dans un modalPanel.
    Le formulaire du modalPanel fonctionne bien et ma donnée est bien insérer dans la base de donnée.
    Le soucis se situe au niveau du modalPanel, des messages d'erreurs eventuels du formulaire et le rafraichissement de la liste (sans que ce soit la page qui se rafraichisse).

    Si je mets comme regle de navigation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	 <navigation-rule>
    		<from-view-id>/gestionrao.jsp</from-view-id>
    		<navigation-case>
    		<from-outcome>saveNewConcurrent</from-outcome>
    		<to-view-id>/gestionrao.jsp</to-view-id>
    		<redirect/>
    		</navigation-case>
    	</navigation-rule>
    Le modalPanel affiche bien les message d'erreurs s'il y en a et se ferme bien s'il n'y en a pas. La bdd est bien remplie mais toute ma page se rafraichit et non pas uniquement la liste déroulante.

    Si je ne mets pas de regle de navigation, ma liste est bien rafraichit (sans que ce soit la page) et je vois les messages d'erreurs s'il y en a mais mon modalPanel reste toujours ouvert.

    Si je rajoute dans ma commande du bouton du formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oncomplete="Richfaces.hideModalPanel('addConcurrent');"
    Le modalPanel se ferme tout le temps, meme si j'ai des messages d'erreurs. Ce qui ne me convient pas.

    Ma question est : existe il une solution pour qu'il n'y ait que ma liste de mis a jour avec un modalPanel qui reste ouvert s'il y a des messages d'erreurs et qui se ferme si tout ce passe bien ?

    Voici le code de mon modalPanel au complet

    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
     
    		<c:subview id="nouveauConcurrent">
    		    <rich:modalPanel id="addConcurrent" headerClass="headerPanel" styleClass="simplePanel" style="border-color:#ba3d3d;" autosized="true" rendered="">
    		        <c:facet name="header">
    		            <h:panelGroup>
    		                <h:outputText value="Ajouter un concurrent"></h:outputText>
    		            </h:panelGroup>
    		        </c:facet>
    		        <c:facet name="controls">
    		            <h:panelGroup>
    		                <h:graphicImage value="/media/images/fermer.png" style="cursor:pointer" id="hidePanelConcurrent" width="14"/>
    		                <rich:componentControl for="addConcurrent" attachTo="hidePanelConcurrent" operation="hide" event="onclick"/>
    		            </h:panelGroup>
    		        </c:facet>
    			    <h:form id="newConcurrentForm">
    			        <t:panelGrid columns="3" id="panelAddConcurrent">
    				        <h:outputText value="Nom Court:" styleClass="labelChamp"/>
    				        <t:inputText id="nomCourtAddConcurrent" value="#{saveNewConcurrentFromGestionrao.nomCourt}" required="true">
    				        	<c:validator validatorId="concurrentValid" />
    				        </t:inputText>
    				        <t:panelGroup>
    					        <a4j:outputPanel ajaxRendered="true">
    					        	<h:message id="concurrentNomCourtError" for="nomCourtAddConcurrent"/>
    					        </a4j:outputPanel>
    				        </t:panelGroup>
    				        <h:outputText value="Nom Long:" styleClass="labelChamp"/>
    				        <t:inputText  id="nomLongAddConcurrent" value="#{saveNewConcurrentFromGestionrao.nomLong}" required="true">
    				        	<c:validator validatorId="concurrentValid" />			        
    				        </t:inputText>
    						<t:panelGroup>
    					        <a4j:outputPanel ajaxRendered="true">
    						        <h:message id="concurrentNomLongError" for="nomLongAddConcurrent" />
    						    </a4j:outputPanel>
    						</t:panelGroup> 
    				        <h:outputText/>
    				        <a4j:commandButton id="buttonAddConcurrent" action="#{saveNewConcurrentFromGestionrao.saveNewConcurrentFromGestionrao}"  value="Ajouter" styleClass="elmtAlignCentre" reRender="addConcu"/>
    				        <h:outputText/>
    			        </t:panelGrid>
    			    </h:form>
    		    </rich:modalPanel>
    	</c:subview>
    et voici le code de la liste à mettre à jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <a4j:outputPanel id="addConcu" >
       <rich:pickList id="concurrent" value="#{gestionRaoBean.concurrent}" listsHeight="92" showButtonsLabel="false" disabledStyleClass="boutonPickListDisabled" enabledStyleClass="boutonPickList" sourceListWidth="100" targetListWidth="100" >
           <c:selectItems value="#{gestionRaoBean.concurrentChoice}" />
       </rich:pickList>
    </a4j:outputPanel>

  2. #2
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Voici une idée :

    Dans le JSF:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ... oncomplete="#{monBean.onComplete}"/>
    Dans monBean :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public String getOnComplete() {
        if (FacesContext.getCurrentInstance().getMessages().isEmpty()) {
            // Il n'y a aucun message de validation, donc on ferme le modal panel.
            return "Richfaces.hideModalPanel('addConcurrent');";
        } else {
            // Il y a des messages d'erreur, on ne ferme donc pas le modal panel.
            return "";
        }
    }
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Merci Romaintaz, ça fonctionne à une petite chose pret : je n'ai pas de isEmpty sur le FacesContext.getCurrentInstance().getMessages() car ça renvoie un Iterator.
    J'ai utilisé hasNext et ca marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	public String getOnComplete(){
     
    	if (FacesContext.getCurrentInstance().getMessages().hasNext()) {
    		return "Richfaces.showModalPanel('addConcurrent');";
    	    } else {
    	    	return "Richfaces.hideModalPanel('addConcurrent');";
    	    }
    	}
    J'aurai une autre question :
    Dans mon modalPanel, au niveau des inputtext, je fais appel a un validator.
    A chaque appel de la page (alors que je n'ai fait encore aucun appel au validator mais il me semble que c'est le fonctionnement de JSF) j'ai un message d'erruer dans mes logs (et comme j'ai deux validator, j'ai deux fois ce message)

    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
    java.lang.Exception: Stack trace
    	at java.lang.Thread.dumpStack(Thread.java:1158)
    	at org.apache.myfaces.taglib.core.ValidatorImplTag.createValidator(ValidatorImplTag.java:69)
    	at javax.faces.webapp.ValidatorELTag.doStartTag(ValidatorELTag.java:111)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_c_005fvalidator_005f0(gestionrao_jsp.java:5484)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_t_005finputText_005f0(gestionrao_jsp.java:5453)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_t_005fpanelGrid_005f1(gestionrao_jsp.java:5354)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_h_005fform_005f1(gestionrao_jsp.java:5305)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_rich_005fmodalPanel_005f0(gestionrao_jsp.java:5034)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_c_005fsubview_005f1(gestionrao_jsp.java:4974)
    	at org.apache.jsp.gestionrao_jsp._jspx_meth_c_005fview_005f0(gestionrao_jsp.java:262)
    	at org.apache.jsp.gestionrao_jsp._jspService(gestionrao_jsp.java:193)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
    	at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:338)
    	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.buildView(JspViewHandlerImpl.java:480)
    	at org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspViewHandlerImpl.java:334)
    	at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
    	at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:189)
    	at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
    	at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
    	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:147)
    	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:256)
    	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:362)
    	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:488)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:147)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    	at java.lang.Thread.run(Thread.java:595)
    Voici comment est déclaré mon validator
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	<validator>
    		<validator-id>concurrentValid</validator-id>
    		<validator-class>com.xxxx.validator.NewConcurrentAddValidator</validator-class>
    	</validator>
    et voici le code de ce validator :
    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
     
    package com.xxxx.validator;
     
    import java.util.List;
     
    import javax.faces.application.FacesMessage;
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    import javax.faces.validator.Validator;
    import javax.faces.validator.ValidatorException;
     
    import com.xxxx.Concurrent;
    import com.xxxx.dao.ConcurrentHome;
     
    public class NewConcurrentAddValidator implements Validator {
     
    	private String value = "";
    	private ConcurrentHome ch = new ConcurrentHome();
     
    	public void validate(FacesContext fc, UIComponent uic, Object obj)
    			throws ValidatorException {
    		value = obj.toString();
    		if (value != ""){
    			List<Concurrent> lc = ch.findByProperty("nomCourt", value, "Concurrent");
    			List<Concurrent> lc2 = ch.findByProperty("nomLong", value, "Concurrent");
    			if (lc.size()!=0 || lc2.size()!=0){
    				throw new ValidatorException(new FacesMessage("Ce nom existe déjà !"));
    			}
    		}
    	}
     
    }
    Une idée ?

  4. #4
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Pour moi, il n'y a pas d'erreur ! Je m'explique :
    Thread.dumpStack() permet d'afficher la stacktrace du thread courant. L'affichage est le même que lorsqu'il y a une erreur, mais sans qu'il n'y ait d'erreur.
    Cette méthode n'est cependant utile que pour le débug...

    Donc je pense qu'il n'y a pas d'erreur mais que soit :
    • tu utilises une version non stable de MyFaces.
    • tu as positionné un paramètre (lequel ? je n'en sais rien) qui lance MyFaces en mode débug...
    Peut être une mise à jour de MyFaces résoudrait le problème...
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 47
    Par défaut
    Un grand merci Romaintaz pour ton aide (et tout l'aide que tu m'a donné indirectement en répondant aux autres)

    J'ai passé dans mon pom (car j'utilise aussi maven2) la version de myfaces-impl et myfaces-api de 1.2.2 en 1.2.3 et je n'ai plus d'erreurs.

  6. #6
    Rédacteur
    Avatar de romaintaz
    Homme Profil pro
    Java craftsman
    Inscrit en
    Juillet 2005
    Messages
    3 790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Bien content d'avoir résolu tes problèmes Breezy.
    Pense à cliquer sur le bouton quand l'un de tes problèmes est résolu
    Nous sommes tous semblables, alors acceptons nos différences !
    --------------------------------------------------------------
    Liens : Blog | Page DVP | Twitter
    Articles : Hudson | Sonar | Outils de builds Java Maven 3 | Play! 1 | TeamCity| CitConf 2009
    Critiques : Apache Maven

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Navigator
    Par Chonchon dans le forum Bases de données
    Réponses: 4
    Dernier message: 01/05/2004, 14h53
  2. [Forms] : Gestion de Navigation entre module
    Par patmaba dans le forum Forms
    Réponses: 12
    Dernier message: 09/04/2004, 14h09
  3. Comment gérer la Navigation d'un site ?
    Par chtiboss dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 22/03/2004, 13h17
  4. [JSP][Barre de navigation] Gestion du bouton precedent
    Par lando dans le forum Servlets/JSP
    Réponses: 11
    Dernier message: 09/09/2003, 16h18
  5. Bouton de navigation
    Par thierry sache dans le forum Flash
    Réponses: 2
    Dernier message: 17/12/2002, 11h43

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