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 :

viewState et cycle de vie


Sujet :

JSF Java

  1. #1
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut viewState et cycle de vie
    Bonjour,

    Nous avons un ecran avec une datatable, un champ de filtre et un bouton rechercher (avec un action listener sur ce bouton qui remplit la datatable) et un bean en scope request qui gère cet écran.

    -1- On fait une recherche (avec un critère de filtre). On passe par les 6 étapes du cycle de vie et on a un bon résultat. Si on affiche la requete et ses parametres du context jsf on voit que l'on a bien un attribut viewState avec des valeurs...

    -2- On fait une deuxième recherche et là on passe de la phase 1 à la phase 6 directement, du coup la recherche ne se fait pas (les critères ne sont pas pris en compte parce qu'on ne passe pas par la phase 4...) et on n'a pas de viewState dans la requete...


    -3- On refait une recherche, et là tout est ok. (Execution des 6 phases + resultat ok et viewState présent)

    Ne devrait on pas executer les 6 phases à chaque requete et avoir un viewState a chaque fois ?

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ca se produit généralement quand le bouton d'action et/ou le champs mentionné dans le formulaire ont disparu entre temps. Typiquement sa ce produit quand le rendu du bouton est soumis à des conditions quis varient. Exemple: ton bouton est à la ligne 3 du datatable. Tu clique dessus, soumission du formulaire, première phase, le datatable est devenu vide (parce que lié à un request scope qui n'a pas été préservé par exemple), il n'y a donc pas de "bouton sur la trousième ligne" donc pas d'action invoqué, donc rien à faire, donc on saute à la phase rendu.

  3. #3
    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 si tu donnait ton code..ça aiderait mieux à comprendre.

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ca se produit généralement quand le bouton d'action et/ou le champs mentionné dans le formulaire ont disparu entre temps. Typiquement sa ce produit quand le rendu du bouton est soumis à des conditions quis varient. Exemple: ton bouton est à la ligne 3 du datatable. Tu clique dessus, soumission du formulaire, première phase, le datatable est devenu vide (parce que lié à un request scope qui n'a pas été préservé par exemple), il n'y a donc pas de "bouton sur la trousième ligne" donc pas d'action invoqué, donc rien à faire, donc on saute à la phase rendu.
    Le pb est que le bouton (commandLInk) n'est pas dans la dataTable mais au dessus...

  5. #5
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par Sniper37 Voir le message
    et si tu donnait ton code..ça aiderait mieux à comprendre.
    La page xhtml :

    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
     
     <h:form id="SIForm">
          <h:panelGrid columns="2" styleClass="trailForm">
          <h:panelGrid columns="2">
            <h:outputText value="#{msgs.trail_domain}" />
            <h:outputText value="#{msgs.followup_process_id}"/>
            <h:selectOneMenu value="#{suiviIncident.selectedDomaine}" id="domaines">
              <f:selectItems value="#{suiviIncident.domainesIncident}" />
            </h:selectOneMenu>
            <h:inputText value="#{suiviIncident.processIds}" id="processIds"/>
          </h:panelGrid>
          <h:panelGrid columns="2">
          <h:commandLink id="search" actionListener="#{suiviIncident.apply}">
              <h:graphicImage value="images/search.gif" alt="#{msgs.trail_search}"/>
              <h:outputText value="#{msgs.trail_search}"/>
            </h:commandLink>
          </h:panelGrid> 
        </h:panelGrid>
     
        <h:panelGroup id="body">
         <t:dataTable id="process"
        	value="#{suiviIncident.results}"  
            headerClass="trail"
            styleClass="adminTable" rowClasses="adminTable1,adminTable2"
            var="row" rendered="#{!empty suiviIncident.results}"
            rows="#{suiviIncident.rowCount}"
            >
         ....
       </t:dataTable>
    Le bean managé :
    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
     
     
    public class SuiviIncident {
    	private String processIds = ""; 
    	private List<RowResult> results;
            // d'autres attributs...
     
    	public void apply(ActionEvent actionEvent) {
    		setResults(search());
    	}
    	public List<RowResult> getResults() {
    		return results;
    	}
           public List search() {
                .... // requete BDD
                return list;
           }
           // Getteur et setteur ...
    }

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi utilise tu un actionlistener plutot qu'un action sur ton commande link? Rajoute un <h:messages/> dans ta page pour voir les erreurs de validation éventuelles.

  7. #7
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Parce que je ne voyais pas la différence entre les 2. Maintenant c'est plus clair, je vais essayer avec action n'ayant pas de raison évidente d'utiliser un actionListener.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Visiblement ca ne change rien au problème... Une autre idée ?

  9. #9
    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 : 47
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Java craftsman
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2005
    Messages : 3 790
    Par défaut
    Et tu as mis le <h:messages/> dans le <h:form/> pour détecter d'éventuelles erreurs de validation ?
    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

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par romaintaz Voir le message
    Et tu as mis le <h:messages/> dans le <h:form/> pour détecter d'éventuelles erreurs de validation ?
    Oui. Visiblement il n'y a pas d'erreur de ce côté là. Les h:messages marchent bien puisque quand je tape autre chose qu'un entier dans mon filtre "processIds" j'ai un warning (que je gère moi même avec JsfHelper.addWarningMessage(message)

  11. #11
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peut voir la déclaration de suiviIncident dans ton facesconfig.xml ?

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    on peut voir la déclaration de suiviIncident dans ton facesconfig.xml ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	<managed-bean>
    		<managed-bean-name>suiviIncident</managed-bean-name>
    		<managed-bean-class>
    			com.myapp.webapp.bean.SuiviIncident
    		</managed-bean-class>
    		<managed-bean-scope>request</managed-bean-scope>
    	</managed-bean>

  13. #13
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu utilise qui pour compter les phases? Peux tu ajouter un outils genre facestrace et nous donner le screenshot de son rapport?

  14. #14
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu utilise qui pour compter les phases? Peux tu ajouter un outils genre facestrace et nous donner le screenshot de son rapport?
    on a dans faces-config.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	<lifecycle>
    		<phase-listener>
    			com.myapp.tima.webapp.listener.JbpmPhaseListener
    		</phase-listener>
    	</lifecycle>
    et

    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
     
    public final class JbpmPhaseListener implements PhaseListener {
     
        public PhaseId getPhaseId() {
            return PhaseId.ANY_PHASE;
        }
     public void beforePhase(PhaseEvent phaseEvent) {
            final PhaseId phaseId = phaseEvent.getPhaseId();
    	System.out.println("Before phase " + phaseId);
            .....
            printRequest(); // affiche tout requestMap() (key => value)
            printRequestParameter(); // affiche tous les params
     }
      public void afterPhase(PhaseEvent phaseEvent) {
        	System.out.println("After phase "+phaseEvent.getPhaseId());
      }
    }
    Et voici la trace venant des system.out + des 2 methodes printRequest... dans le cas ou ca marche (on a bien un viewState):

    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
     
    Before phase RESTORE_VIEW 1
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
    After phase RESTORE_VIEW 1
    Before phase APPLY_REQUEST_VALUES 2
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.actualViewMap => j_id6
        com.sun.faces.logicalViewMap => j_id5
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        fullPdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@30fab2
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@447492
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
        pdCriteria => CriteriaImpl(org.jbpm.graph.def.ProcessDefinition:this[][])
        pdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@447e36
        requestFilter => com.myapp.tima.webapp.bean.search.filter.PublicRequestFilterBean@39873d
        requestSearch2 => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@566d13
    After phase APPLY_REQUEST_VALUES 2
    Before phase PROCESS_VALIDATIONS 3
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.actualViewMap => j_id6
        com.sun.faces.logicalViewMap => j_id5
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        fullPdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@30fab2
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@447492
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
        pdCriteria => CriteriaImpl(org.jbpm.graph.def.ProcessDefinition:this[][])
        pdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@447e36
        requestFilter => com.myapp.tima.webapp.bean.search.filter.PublicRequestFilterBean@39873d
        requestSearch2 => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@566d13
        suiviIncident => com.myapp.tima.webapp.bean.SuiviIncident@457755
    After phase PROCESS_VALIDATIONS 3
    Before phase UPDATE_MODEL_VALUES 4
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.actualViewMap => j_id6
        com.sun.faces.logicalViewMap => j_id5
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        fullPdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@30fab2
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@447492
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
        pdCriteria => CriteriaImpl(org.jbpm.graph.def.ProcessDefinition:this[][])
        pdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@447e36
        requestFilter => com.myapp.tima.webapp.bean.search.filter.PublicRequestFilterBean@39873d
        requestSearch2 => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@566d13
        suiviIncident => com.myapp.tima.webapp.bean.SuiviIncident@457755
    After phase UPDATE_MODEL_VALUES 4
    Before phase INVOKE_APPLICATION 5
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.actualViewMap => j_id6
        com.sun.faces.logicalViewMap => j_id5
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        fullPdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@30fab2
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@447492
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
        pdCriteria => CriteriaImpl(org.jbpm.graph.def.ProcessDefinition:this[][])
        pdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@447e36
        requestFilter => com.myapp.tima.webapp.bean.search.filter.PublicRequestFilterBean@39873d
        requestSearch2 => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@566d13
        suiviIncident => com.myapp.tima.webapp.bean.SuiviIncident@457755
    -----Apply action----
    After phase INVOKE_APPLICATION 5
    Before phase RENDER_RESPONSE 6
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
        javax.faces.ViewState => "j_id5:j_id6"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@450147
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@450140
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.actualViewMap => j_id6
        com.sun.faces.logicalViewMap => j_id5
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        currentViewId => /pages/search/processesSpecific.xhtml
        fullPdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@30fab2
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@447492
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@450177
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
        pdCriteria => CriteriaImpl(org.jbpm.graph.def.ProcessDefinition:this[][])
        pdSearch => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@447e36
        requestFilter => com.myapp.tima.webapp.bean.search.filter.PublicRequestFilterBean@39873d
        requestSearch2 => com.myapp.tima.webapp.tag.jbpm.ui.UICriteria$CriteriaSearchBean@566d13
        suiviIncident => com.myapp.tima.webapp.bean.SuiviIncident@457755
    After phase RENDER_RESPONSE 6

    et dans le cas ou ca ne marche pas (on passe de 1 à 6 directement et on a pas de viewState :
    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
     
    Before phase RESTORE_VIEW 1
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
     
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@3a937c
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@3a9375
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@3a93d5
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
    After phase RESTORE_VIEW 1
    Before phase RENDER_RESPONSE 6
     
        SIForm => "SIForm"
        SIForm:domaines => "ALL"
        SIForm:processIds => "157"
        SIForm:search => "SIForm:search"
     
        class org.apache.myfaces.shared_tomahawk.renderkit.html.util.JavascriptUtils.OLD_VIEW_ID => /pages/search/processesSpecific.xhtml
        com.sun.faces.DefaultLifecycle => true
        com.sun.faces.ExternalContextImpl => com.sun.faces.context.ExternalContextImpl@3a937c
        com.sun.faces.FacesContextImpl => com.sun.faces.context.FacesContextImpl@3a9375
        com.sun.faces.INVOCATION_PATH => .jsf
        com.sun.faces.managedBeanStack => []
        com.sun.faces.renderKitImplForRequest => com.sun.faces.renderkit.RenderKitFactoryImpl@1650cf
        currentViewId => /pages/search/processesSpecific.xhtml
        jbpmBean => com.myapp.tima.webapp.bean.JbpmBean@3a6e3b
        org.apache.myfaces.AddResourceFactory.CACHE_MAP_KEY => org.apache.myfaces.renderkit.html.util.DefaultAddResource@3a93d5
        org.apache.myfaces.component.html.util.ExtensionFilter.doFilterCalled => true
    After phase RENDER_RESPONSE 6

  15. #15
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ce qui est curieux, c'est que dans le cas ou ca marche pas, il manque "javax.faces.ViewState => "j_id5:j_id6", hors si je me souviens bien, c'est la présence de ce viewState qui permet a JSF de conclure qu'on continue avec une vue. Sinon il considère que c'est uen vue initiale. Il faudrait voir pourquoi ce viewState n'est pas présent dans le formulaire soumis.

  16. #16
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    ce qui est curieux, c'est que dans le cas ou ca marche pas, il manque "javax.faces.ViewState => "j_id5:j_id6", hors si je me souviens bien, c'est la présence de ce viewState qui permet a JSF de conclure qu'on continue avec une vue. Sinon il considère que c'est uen vue initiale. Il faudrait voir pourquoi ce viewState n'est pas présent dans le formulaire soumis.
    C'est bien ça que je ne comprends pas. Est il possible de forcer la présence de ce viewState ? C'est comme si une fois sur 2 la page devait se recharger pour prendre en compte une nouvelle recherche.

  17. #17
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    tu saurais nous donner le xhtml généré juste avant qu'il pose problème (en gros donc celui qui ne va pas soumettre correctement) ?

  18. #18
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu saurais nous donner le xhtml généré juste avant qu'il pose problème (en gros donc celui qui ne va pas soumettre correctement) ?
    Sur cette page, il y a un resultat. Si on clique sur "Rechercher" la nouvelle recherche ne marchera pas. (effectivement il n'y a pas de input hidden name="viewState"...)

    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
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
     
    <form enctype="application/x-www-form-urlencoded" action="/tima/pages/search/processesSpecific.jsf" method="post" name="SIForm" id="SIForm">
    <input type="hidden" value="SIForm" name="SIForm"/>
     
    <table class="trailForm">
    <tbody>
    <tr>
    <td><table>
    <tbody>
    <tr>
    <td>Domaine incident</td>
    <td>Numero du processus</td>
    </tr>
    <tr>
    <td><select size="1" name="SIForm:domaines" id="SIForm:domaines">	<option selected="selected" value="ALL">< Tous ></option>
    	<option value="offres commerciales">offres commerciales</option>
    	<option value="valorisation">valorisation</option>
    	<option value="recouvrement">recouvrement</option>
    	<option value="facturation">facturation</option>
    </select></td>
    <td><input type="text" value="" name="SIForm:processIds" id="SIForm:processIds"/></td>
    </tr>
    </tbody>
    </table>
    </td>
    <td><table>
    <tbody>
    <tr>
    <td><a onclick="if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:search,SIForm:search','');}return false" href="#" id="SIForm:search"><img alt="Rechercher" src="images/search.gif"/>Rechercher</a></td>
    </tr>
    </tbody>
    </table>
    </td>
    </tr>
    </tbody>
    </table>
    <span id="SIForm:body">
    <table class="adminTable" id="SIForm:process">
    <thead>
    <tr><th class="trail">Processus</th><th class="trail">Titre</th><th class="trail">Statut</th><th class="trail">Date statut</th><th class="trail">Priorite</th><th class="trail">Jours restants</th><th class="trail"/></tr></thead>
    <tbody id="SIForm:process:tbody_element">
    <tr class="adminTable1"><td><a href="pages/process/view.jsf?piid=157">Incident 157</a></td><td>
            <span title="OPTION 500MN  mal valorisée">OPTION 500MN  mal valorisée
            </span></td><td>
            <span title="Cloture">Cloture
            </span></td><td>
            <span title="2008-03-26 11:01:24.954">26/03/2008
            </span></td><td>
            <span title="P1G">P1G
            </span></td><td>
            <span title="">
            </span></td><td><a onclick="var a=function(){return confirm(&quot;Etes-vous sur de vouloir supprimer cette instance ?&quot;);};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:process:0:deleteProcessButton,SIForm:process:0:deleteProcessButton','');}return false};return (a()==false) ? false : b();" href="#" id="SIForm:process:0:deleteProcessButton"><img alt="Supprimer Incident 157" src="images/small_delete.gif"/></a></td></tr>
    <tr class="adminTable2"><td><a href="pages/process/view.jsf?piid=174">Incident 174</a></td><td>
            <span title="Les SMS (de classe SO3NI) ne sont pas pris en compte dans le godet SM1M5.">Les SMS (de classe SO3NI) ne sont pas...
            </span></td><td>
            <span title="Cloture">Cloture
            </span></td><td>
            <span title="2008-03-20 11:56:20.813">20/03/2008
            </span></td><td>
            <span title="P1G">P1G
            </span></td><td>
            <span title="">
            </span></td><td><a onclick="var a=function(){return confirm(&quot;Etes-vous sur de vouloir supprimer cette instance ?&quot;);};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:process:1:deleteProcessButton,SIForm:process:1:deleteProcessButton','');}return false};return (a()==false) ? false : b();" href="#" id="SIForm:process:1:deleteProcessButton"><img alt="Supprimer Incident 174" src="images/small_delete.gif"/></a></td></tr>
    <tr class="adminTable1"><td><a href="pages/process/view.jsf?piid=291">Incident 291</a></td><td>
            <span title="modification de coordonnées client de pays étranger (code erreur 35)">modification de coordonnées client de...
            </span></td><td>
            <span title="Publie">Publie
            </span></td><td>
            <span title="2008-10-14 14:04:31.35">14/10/2008
            </span></td><td>
            <span title="P1">P1
            </span></td><td>
            <span title="">
            </span></td><td><a onclick="var a=function(){return confirm(&quot;Etes-vous sur de vouloir supprimer cette instance ?&quot;);};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:process:2:deleteProcessButton,SIForm:process:2:deleteProcessButton','');}return false};return (a()==false) ? false : b();" href="#" id="SIForm:process:2:deleteProcessButton"><img alt="Supprimer Incident 291" src="images/small_delete.gif"/></a></td></tr>
    <tr class="adminTable2"><td><a href="pages/process/view.jsf?piid=295">Incident 295</a></td><td>
            <span title="Doublon dans la JUPITER.CO_COUNTRY_CODES">Doublon dans la JUPITER.CO_COUNTRY_CODES
            </span></td><td>
            <span title="Instruit">Instruit
            </span></td><td>
            <span title="2008-03-05 09:25:03.464">05/03/2008
            </span></td><td>
            <span title="P2">P2
            </span></td><td>
            <span title="">
            </span></td><td><a onclick="var a=function(){return confirm(&quot;Etes-vous sur de vouloir supprimer cette instance ?&quot;);};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:process:3:deleteProcessButton,SIForm:process:3:deleteProcessButton','');}return false};return (a()==false) ? false : b();" href="#" id="SIForm:process:3:deleteProcessButton"><img alt="Supprimer Incident 295" src="images/small_delete.gif"/></a></td></tr>
    <tr class="adminTable1"><td><a href="pages/process/view.jsf?piid=297">Incident 297</a></td><td>
            <span title="Demande de priorisassions godet HNPI9">Demande de priorisassions godet HNPI9
            </span></td><td>
            <span title="Cloture">Cloture
            </span></td><td>
            <span title="2008-03-19 11:47:13.523">19/03/2008
            </span></td><td>
            <span title="P1G">P1G
            </span></td><td>
            <span title="">
            </span></td><td><a onclick="var a=function(){return confirm(&quot;Etes-vous sur de vouloir supprimer cette instance ?&quot;);};var b=function(){if(typeof jsfcljs == 'function'){jsfcljs(document.forms['SIForm'],'SIForm:process:4:deleteProcessButton,SIForm:process:4:deleteProcessButton','');}return false};return (a()==false) ? false : b();" href="#" id="SIForm:process:4:deleteProcessButton"><img alt="Supprimer Incident 297" src="images/small_delete.gif"/></a></td></tr></tbody></table>
    <table class="scrollerTable2">
    <tbody>
    <tr>
    <td class="standardTable_ColumnCentered"><table class="scroller"><tbody><tr><td><script type="text/javascript">
     
    	function oamSetHiddenInput(formname, name, value)
    	{
    		var form = document.forms[formname];
    		if(typeof form.elements[name]=='undefined')
    		{
    			var newInput = document.createElement('input');
    			newInput.setAttribute('type','hidden');
    			newInput.setAttribute('id',name);
    			newInput.setAttribute('name',name);
    			newInput.setAttribute('value',value);
    			form.appendChild(newInput);
    		}
    		else
    		{
    			form.elements[name].value=value;
    		}
     
    	}
     
     
    	function oamClearHiddenInput(formname, name, value)
    	{
    		var form = document.forms[formname];
    		if(typeof form.elements[name]!='undefined')
    		{
    			form.elements[name].value=null;
    		}
     
    	}
     
    	function oamSubmitForm(formName, linkId, target, params)
    	{
     
    		var clearFn = 'clearFormHiddenParams_'+formName.replace(/-/g, '\$:').replace(/:/g,'_');
    		if(typeof eval('window.'+clearFn)!='undefined')
    		{
    			eval('window.'+clearFn+'(formName)');
    		}
     
    		var oldTarget = '';
    		if((typeof target!='undefined') && target != null)
    		{
    			oldTarget=document.forms[formName].target;
    			document.forms[formName].target=target;
    		}
    		if((typeof params!='undefined') && params != null)
    		{
    			for(var i=0; i<params.length; i++)
    			{
    				oamSetHiddenInput(formName,params[i][0], params[i][1]);
    			}
     
    		}
     
    		oamSetHiddenInput(formName,formName +':'+'_idcl',linkId);
     
    		if(document.forms[formName].onsubmit)
    		{
    			var result=document.forms[formName].onsubmit();
    			if((typeof result=='undefined')||result)
    			{
    				document.forms[formName].submit();
    			}
     
    		}
    		else 
    		{
    			document.forms[formName].submit();
    		}
    		if(oldTarget==null) oldTarget='';
    		document.forms[formName].target=oldTarget;
    		if((typeof params!='undefined') && params != null)
    		{
    			for(var i=0; i<params.length; i++)
    			{
    				oamClearHiddenInput(formName,params[i][0], params[i][1]);
    			}
     
    		}
     
    		oamClearHiddenInput(formName,formName +':'+'_idcl',linkId);return false;
    	}
     
    </script><a id="SIForm:scroll_1previous" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1previous',null,[['SIForm:scroll_1','previous']]);" href="#"><img border="0" src="images/back.png" id="SIForm:j_id318"/></a></td><td><table class="paginator"><tbody><tr><td style="font-weight: bold;"><a id="SIForm:scroll_1idx1" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx1',null,[['SIForm:scroll_1','idx1']]);" href="#">1</a></td><td><a id="SIForm:scroll_1idx2" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx2',null,[['SIForm:scroll_1','idx2']]);" href="#">2</a></td><td><a id="SIForm:scroll_1idx3" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx3',null,[['SIForm:scroll_1','idx3']]);" href="#">3</a></td><td><a id="SIForm:scroll_1idx4" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx4',null,[['SIForm:scroll_1','idx4']]);" href="#">4</a></td><td><a id="SIForm:scroll_1idx5" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx5',null,[['SIForm:scroll_1','idx5']]);" href="#">5</a></td><td><a id="SIForm:scroll_1idx6" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx6',null,[['SIForm:scroll_1','idx6']]);" href="#">6</a></td><td><a id="SIForm:scroll_1idx7" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx7',null,[['SIForm:scroll_1','idx7']]);" href="#">7</a></td><td><a id="SIForm:scroll_1idx8" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx8',null,[['SIForm:scroll_1','idx8']]);" href="#">8</a></td><td><a id="SIForm:scroll_1idx9" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1idx9',null,[['SIForm:scroll_1','idx9']]);" href="#">9</a></td></tr></tbody></table></td><td><a id="SIForm:scroll_1next" onclick="return oamSubmitForm('SIForm','SIForm:scroll_1next',null,[['SIForm:scroll_1','next']]);" href="#"><img border="0" src="images/forward.png" id="SIForm:j_id319"/></a></td></tr></tbody></table></td>
    </tr>
    <tr>
    <td class="standardTable_ColumnCentered"><span class="">432 resultat(s), 5 affiche(s), de 1 a 5. Page 1 / 87</span></td>
    </tr>
    </tbody>
    </table>
    </span>
    </form>

  19. #19
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 15
    Par défaut
    Petit "work around" foireux mais efficace : je mets en dur un champ input type="hidden" name="javax.faces.ViewState" value="..." et ca marche a tous les coups...

    C'est pas beau mais ca marche... (et ca ne nous fait pas comprendre ce qui se passait)

  20. #20
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Est-ce que, dans le cas ou tu affiche le formulaire de résultat avec des résultats dedans, tu n'aurais pas oublié de mettre un f:view ?

Discussions similaires

  1. Model de cycle de vie d'un logiciel
    Par apt dans le forum Méthodes
    Réponses: 4
    Dernier message: 29/10/2014, 23h54
  2. Réponses: 7
    Dernier message: 08/03/2007, 09h23
  3. Réponses: 6
    Dernier message: 07/03/2007, 09h32
  4. [Maven2] Cycle de Vie - Phases et Goals
    Par Palmer dans le forum Maven
    Réponses: 4
    Dernier message: 05/03/2007, 22h34
  5. [EJB Stateful] [Cycle de vie] methode remove()
    Par anitshka dans le forum Java EE
    Réponses: 3
    Dernier message: 05/12/2006, 17h31

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