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";
  }
  
}