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 :

Ne valider que certains composant


Sujet :

JSF Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut Ne valider que certains composant
    Bonjour,

    J'envoi un fichier et d'autres information à partir d'un formulaire JSF. J'ai un phaseListener qui avant de lancer la validation des données parcours mes composant. J'aimerai qu'a partir de cette phase je puisse lancer la validation que sur les composant qui me plaisent. Dans mon cas le fichier envoyé uniquement. Je sais que l'on peut exécuter la méthode processValidators sur un composant.

    Le problème est que je n'arrive pas à récupérer le composant qui concerne mon fichier avec la methode findComponent de UIViewRoot .

    Voici 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
    public void beforePhase(PhaseEvent arg0) {
    		if(arg0.getPhaseId().equals(PhaseId.PROCESS_VALIDATIONS)){
    			//je récupère mon FacesContext et mon ViewRoot
    			FacesContext context = arg0.getFacesContext();
    			HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
    			String contentHeader = request.getHeader("content-type");
    			UIViewRoot view = context.getViewRoot();
    			//si le formualaire est encoder en multipart
    			boolean isMultipart = ( contentHeader != null &&
    					contentHeader.indexOf("multipart/form-data") != -1); 
    			if(isMultipart){
    				boolean upload = false;
    				MultipartRequestWrapper multipartRequest = (MultipartRequestWrapper)request;
    				//Pour chaque fichier uploader
    				for(Object item:multipartRequest.getFileItems().values()){
    					FileItem file = (FileItem)item;
    					//je récupère mon composant qui correspondant au clientId
    					UIComponent comp = view.findComponent(file.getFieldName());
    					//je valide le composant puis je met à jour le modele
    					if(comp != null){
    						comp.processValidators(context);
    						comp.processUpdates(context);
    					}
    				}
    				//fin du cycle
    				context.responseComplete();
    			}
    		}
    	}
    Effectivement l'id récupérer par la methode getFieldName ne se trouve pas dans les composants du viewRoot cependant il se trouve bien dans ma page xhtml et correspond bien à mon fichier.

    Pourquoi ce composant ne se trouve pas dans mon viewRoot et comment peut on le récupérer pour que je puisse exécuter la méthode processValidators?

    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
    Pourquoi tu le fais dans le PhaseListener..JE ne pense pas que çe soit une solution fiable,
    tu peux faire la validation du formulaire en ajoutant ton propore validator, et valider les composants que tu veux..

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    ce que je fais dans le phase listener est de filtrer les validateurs. J'ai mes propres validateurs pour tous mes champs. Seulement dans un cas précis je ne doit valider que un fichier. Cependant je suis obligé de soumettre toutes mes données. Donc je souhaite filtrer les validateurs qui seront appelé.
    Si je veux que la phase de updateModel soit exécuter je suis obliger d'exécuter la phase PROCESS_VALIDATION.

    En gros je veux faire come myFaces qui filtre les composant qui'l valide (Dans un region par exemple).

    Comprend tu ce que je veux faire?

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    2 189
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 189
    Par défaut
    Si tu veux ne valider que certains champs champs tu dois mettre en place si tu n'utilises pas de librairies étendus de jsf un concept de partial submit qui ne va faire appel qu'au validateur du composant dont tu feras un submit au serveur

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 92
    Par défaut
    sauf que dan un cas (un clique sur un bouton) je ne vais faire qu'une soumission partiel par contre si je clique sur un autre bouton je vais devoir tous soumettre. Deplus je dois envoyer un fichier (donc encodage en multipart). Si le partial submit repond a tous ca alors il peut etre ma solution mais je ne pense pas. Par exemple les subform de repondent pas à ces critères. Mais si tu pensait à autre chose je suis preneur.

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2006, 13h53
  2. Réponses: 17
    Dernier message: 21/12/2005, 00h35
  3. Ne voire que certaines extensions et masquer les autres
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 04/12/2005, 23h04
  4. [Oracle 8i] ne garder que certains enregistrements (COUNT ?)
    Par delphim dans le forum Langage SQL
    Réponses: 13
    Dernier message: 23/02/2005, 14h30
  5. 1 Table, Des doublons, ne rertenir que certains d'entre eux
    Par Dragano dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/01/2005, 12h06

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