J'ai un validateur JSF qui vérifie si une chaîne de numéro de conteneur est conforme à la spécification ISO-6346.JSF: Accès au bean à partir du validateur via le champ
Cela fonctionne très bien, mais j'ai besoin d'ajouter un traitement conditionnel basé sur d'autres valeurs dans le bean d'où provient le numéro de conteneur. Ce haricot peut être de plusieurs types différents.
Y a-t-il un moyen d'accéder au Bean dans le validateur et d'y effectuer des opérations? Idéalement, j'aimerais le garder en tant que validateur, mais s'il n'y a pas de solution, je devrai implémenter la logique dans le Bean avant de persister.
Je pense quelque chose le long des lignes de:
public class ContainerNumberValidator implements javax.faces.validator.Validator {
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
Object bean = UIComponent.getMyBeanSomehowThroughAMagicMethod();
if(bean instanceof BeanA) {
//do this
} else if(bean instanceof BeanB) {
//do that
}
}
MISE À JOUR: À bien des égards est un problème similaire à la validation de plusieurs champs en même temps. This code par BalusC est utile.
Très apprécié.
D.
Une alternative consiste à obtenir la carte d'attributs directement à partir du composant. Combinez-le avec une interface pour vos affaires et il pourrait être aussi simple que cela ... ISOBean bean = (ISOBean) component.getAttribute ("containerBean"); bean.doStuff(); – Drew