J'ai une interface de page unique très dynamique où divers événements utilisateur déclenchent de nouveaux champs à afficher sur l'écran. J'utilise jsf 1.1 et ajax de base sans la possibilité d'utiliser submit partiel. En raison de ces limitations, j'ai marqué tous mes champs requis faux et immédiatement faux. L'idée est de valider UNIQUEMENT lorsque l'utilisateur tente de passer à la page suivante dans une méthode d'action PAS quand il tabule et exécute un événement ajax. Je mets immédiatement faux parce que j'ai besoin d'entrée pour le rendre modal afin que je puisse conditionnellement rendre certains champs basés sur la logique métier. PROBLEME: Je connais à l'avance une liste des identifiants UIInput "possibles" qui peuvent ou non s'afficher sur l'écran à un moment donné. Mon but est de parcourir toutes ces entrées UI, de vérifier si elles sont rendues, non nulles, et non vides sinon marquer l'UIInput par erreur.Comment parcourir tous les composants affichés à l'écran
Ceci fonctionne à l'exception des champs qui ne sont pas affichés à l'écran. Par exemple, j'ai un champ "amountInput" qui a une propriété XHTML rendue à false pour qu'elle n'apparaisse pas à l'écran. Du point de vue de l'affichage, cela fonctionne, mais en invoquant mon action, ce champ montre toujours sa propriété rendue comme vraie, donc je n'ai aucun moyen de savoir si je devrais le valider ou non.
Quelles sont mes options ici?
public boolean validate() {
boolean hasValidMinimumData = true;
final List<UIInput> componentList = getComponentList();
if (CollectionUtils.isNotEmpty(componentList)) {
for (UIInput curComponent : componentList) {
final Object curComponentValue = curComponent.getValue();
if (curComponent.isRendered() && (curComponentValue == null || isNoValue(curComponent))) {
setError(curComponent); // applies the error
hasValidMinimumData = false;
}
}
}
return hasValidMinimumData;
}
Merci BalusC. Votre nom vous poursuit - j'ai appris beaucoup de votre site. Malheureusement, mettre le viewbean dans la portée de la session n'a pas fonctionné. J'ai mis un point d'arrêt dans mon conditionnel et il a rendu exactement ce qu'il devait avant que mon action ait lieu. C'est comme si l'attribut rendu lié au bean de support était différent de la définition de l'attribut rendu en XHTML. – gevaudan
J'aimerais utiliser Ajax4jsf mais ce n'est pas une option sur mon lieu de travail. Compte tenu de mes exigences, je vois deux solutions, dont chacune a ses défauts: 1. Implémenter toutes les validations de champs requises dans javascript 2. Dupliquer la logique métier dans l'action pour déterminer quand et quand ne pas valider un champ puisque nous pouvons ne semblent pas s'appuyer sur l'attribut rendu. – gevaudan
La propriété el rendue est-elle évaluée pendant la réponse de rendu ou est-elle appliquée dans la phase de mise à jour du modèle/de demande d'invocation? Dans mon code actuel, je vérifie l'attribut rendu dans l'action afin qu'il soit avant la réponse de rendu. Peut-être que c'est un problème. Pour être honnête, j'étais un peu surpris que je puisse même trouver mon composant qui n'est pas affichable car je pensais que le réglage render = false l'exclurait de l'arborescence, ce qui le rendrait indisponible. – gevaudan