Outils pour utilisateurs

Outils du site


helloworld:design_pattern:bean:java

Les Beans (Trail: JavaBeans Archive tar.xz) sont des classes permettant le stockage de données. Les données sont stockées sous forme de propriétés privées et sont modifiées par des getters et setters publics.

Dans le cas d'une propriété de type boolean, le getter commence par is et non pas get.

Cas général

BeanPersonne.java
package com.llgc;
 
public class BeanPersonne
{
  private int taille = 150;
  private boolean yeuxBleus = false;
  private int[] diplomes = null;
 
  public int getTaille ()
  {
    return taille;
  }
 
  public void setTaille (int taille)
  {
    this.taille = taille;
  }
 
  public boolean isYeuxBleus ()
  {
    return yeuxBleus;
  }
 
  public void setYeuxBleus (boolean yeuxBleus)
  {
    this.yeuxBleus = yeuxBleus;
  }
 
  public int[] getDiplomes ()
  {
    return diplomes;
  }
 
  public void setDiplomes (int[] diplomes)
  {
    this.diplomes = diplomes;
  }
 
  public int getDiplomes (int index)
  {
    return diplomes[index];
  }
 
  public void setDiplomes (int index, int diplome)
  {
    this.diplomes[index] = diplome;
  }
}

Tous les Bean doivent contenir un constructeur sans argument. Lorsque aucun constructeur n'est défini, un constructeur sans argument est implicitement créé par Java. Cependant, si un constructeur avec argument est déclaré, il conviendra de déclarer explicitement le constructeur sans argument.

JSP et JSF

Dans le cas d'une utilisation du Bean via JSP et JSF, il est nécessaire de passer la classe en bean managé (@ManagedBean) et les attributs modifiables par une page JSP/JSP en attributs managés (@ManagedProperty).

Si un attribut est managé (avec @ManagedProperty), il n'est pas possible de définir une valeur par défaut avec le constructeur ou en définissant une valeur par défaut à l'attribut. Il faut définit une fonction d'initialisation avec l'annotation @PostConstruct.

Le cycle de vie d'un Bean passe par le constructeur, puis la page JSP/JSF effectue un set* (0 ou null) sur l'ensemble des attributs managés et enfin exécute la méthode désignée par l'annotation @PostConstruct.

package com.llgc;
 
import java.util.Arrays;
 
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
 
@ManagedBean
public class BeanPersonne
{
  @ManagedProperty(value="#{taille}")
  private int taille;
  @ManagedProperty(value="#{yeuxBleus}")
  private boolean yeuxBleus;
  @ManagedProperty(value="#{diplomes}")
  private int[] diplomes;
 
  @PostConstruct
  private void init ()
  {
    setTaille (150);
    setYeuxBleus (true);
    setDiplomes (null);
  }
 
  public int getTaille ()
  {
    return taille;
  }
 
  public void setTaille (int taille)
  {
    this.taille = taille;
  }
 
  public boolean isYeuxBleus ()
  {
    return yeuxBleus;
  }
 
  public void setYeuxBleus (boolean yeuxBleus)
  {
    this.yeuxBleus = yeuxBleus;
  }
 
  public int[] getDiplomes ()
  {
    return diplomes;
  }
 
  public void setDiplomes (int[] diplomes)
  {
    this.diplomes = diplomes;
  }
 
  public int getDiplomes (int index)
  {
    return diplomes[index];
  }
 
  public void setDiplomes (int index, int diplome)
  {
    this.diplomes[index] = diplome;
  }
 
  @Override
  public String toString ()
  {
    return "BeanPersonne [taille=" + taille + ", yeuxBleus=" + yeuxBleus + ", diplomes=" + Arrays.toString (diplomes)
        + "]";
  }
}

Support des Listener

Il est également possible de configurer un Bean pour être surveillé dans ces modifications voir même empêché par un autre composant.

BeanPersonne2.java
package com.llgc;
 
import java.beans.PropertyChangeSupport;
import java.beans.PropertyVetoException;
import java.beans.VetoableChangeSupport;
 
public class BeanPersonne2
{
  private int taille = 150;
  private boolean yeuxBleus = false;
  private int[] diplomes = null;
  private PropertyChangeSupport pcs = new PropertyChangeSupport (this);
  private VetoableChangeSupport vcs = new VetoableChangeSupport (this);
 
  public int getTaille ()
  {
    return taille;
  }
 
  public void setTaille (int taille) throws PropertyVetoException
  {
    int oldTaille = this.taille;
    vcs.fireVetoableChange ("taille", oldTaille, taille);
    this.taille = taille;
    pcs.firePropertyChange ("taille", oldTaille, taille);
  }
 
  public boolean isYeuxBleus ()
  {
    return yeuxBleus;
  }
 
  public void setYeuxBleus (boolean yeuxBleus) throws PropertyVetoException
  {
    boolean oldYeuxBleus = this.yeuxBleus;
    vcs.fireVetoableChange ("yeuxBleus", oldYeuxBleus, yeuxBleus);
    this.yeuxBleus = yeuxBleus;
    pcs.firePropertyChange ("yeuxBleus", oldYeuxBleus, yeuxBleus);
  }
 
  public int[] getDiplomes ()
  {
    return diplomes;
  }
 
  public void setDiplomes (int[] diplomes) throws PropertyVetoException
  {
    int[] oldDiplomes = this.diplomes;
    vcs.fireVetoableChange ("diplomes", oldDiplomes, diplomes);
    this.diplomes = diplomes;
    pcs.firePropertyChange ("diplomes", oldDiplomes, diplomes);
  }
 
  public int getDiplomes (int index)
  {
    return diplomes[index];
  }
 
  public void setDiplomes (int index, int diplome) throws PropertyVetoException
  {
    int oldDiplomes = this.diplomes[index];
    vcs.fireVetoableChange ("diplomes-" + Integer.toString (index), oldDiplomes, diplome);
    this.diplomes[index] = diplome;
    pcs.firePropertyChange ("diplomes-" + Integer.toString (index), oldDiplomes, diplome);
  }
}
helloworld/design_pattern/bean/java.txt · Dernière modification : 2020/04/26 23:00 de root