Remarquez la méthode validateSolde
.
Il vous reste juste à remplacer les 2 "****" par les bonnes valeurs, ça ne devrait pas être bien difficile. Allez voir pour cela dans le code de la page JSF.
package jsf; import xx.xxxxx.xxxxx.service.GestionnaireCompte; // à modifier selon votre package import entity.CompteBancaire; import java.io.Serializable; import jakarta.ejb.EJB; import jakarta.inject.Named; import jakarta.faces.view.ViewScoped; import jsf.util.Util; /** * Backing bean pour la page qui effectue des mouvements sur un compte. */ @Named(value = "mouvement") @ViewScoped public class Mouvement implements Serializable { private Long id; private CompteBancaire compte; private String typeMouvement; private int montant; @Inject private GestionnaireCompte gestionnaireCompte; public int getMontant() { return montant; } public void setMontant(int montant) { this.montant = montant; } public String getTypeMouvement() { return typeMouvement; } public void setTypeMouvement(String typeMouvement) { this.typeMouvement = typeMouvement; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } public CompteBancaire getCompte() { return compte; } public void loadCompte() { compte = gestionnaireCompte.findById(id); } /** * Méthode validatrice pour le montant du mouvement. * Remarque : La méthode doit toujours avoir cette signature. * @param fc * @param composant le composant JSF dans lequel on valide. * @param valeur valeur à valider (le montant pour ce cas) */ public void validateSolde(FacesContext fc, UIComponent composant, Object valeur) { UIInput composantTypeMouvement = (UIInput)composant.findComponent("typeMouvement"); // Il faut savoir si c'est un retrait ou un dépôt. // Sans entrer dans les détails, il faut parfois utiliser // getSubmittedValue() à la place de getLocalValue. // typeMouvement n'est pas encore mis tant que la validation n'est pas finie. String valeurTypeMouvement = (String)composantTypeMouvement.getLocalValue(); if (valeurTypeMouvement == null) { // Pour le cas où l'utilisateur a soumis le formulaire sans indiquer le type du mouvement, // Le test valeurTypeMouvement.equals("retrait") ci-dessous génèrera une erreur car // il est exécuté avant que JSF ne vérifie que l'utilisateur a bien choisi // entre ajout et retrait (le choix est requis dans la page mouvement.xhtml) return; } if (valeurTypeMouvement.equals("****")) { int retrait = (int) valeur; if (compte.getSolde() < retrait) { FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Le retrait doit être inférieur au solde du compte", "Le retrait doit être inférieur au solde du compte"); throw new ValidatorException(message); } } } public String enregistrerMouvement() { if (typeMouvement.equals("****")) { gestionnaireCompte.deposer(compte, montant); } else { gestionnaireCompte.retirer(compte, montant); } Util.addFlashInfoMessage("Mouvement enregistré sur compte de " + compte.getNom()); return "listeComptes?faces-redirect=true"; } }