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