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:
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.
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(); } } }
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
Partager