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