Un simple POJO !

Chez le client, j’interviens depuis peu sur un autre projet.
Pour ne pas rentrer dans les détails, je me retrouve à créer des vues de paramétrage pour certaines tables qui étaient jusqu’ici alimentées à la main par requêtes SQL :)

Je me lance sur un petit test (juste de l’affichage !) sur une seule entité (et j’ai choisi la bonne :D).

Voici l’entité :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class TypePrime implements XXX {

    private Integer id;
    private String code;
    private String libelle;
    private Boolean calculee;

    /*...*/

    public Boolean isCalculee() {
        return this.calculee;
    }

    public void setCalculee(Boolean calculee) {
        this.calculee = calculee;
    }
}

Je me rends sur la page de test, et là surprise ! Exception !
(On utilise du JSF.)

javax.faces.el.PropertyNotFoundException: /faces/parametrage/tableau-prime.xhtml @27,101
value="#{parametre.calculee}": Bean: xxx.TypePrime, property: calculee

Aux premiers abords, je suis surpris par l’exception retournée, je re-regarde l’entité, tout à l’air correct.
Bien évidemment, je relance mon serveur et refais le même test mais rien n’y fait l’exception est toujours là !

Je commence à me dire qu’il y a quelque chose quand même (biensur !).
Je transforme le type de “calculee” en primitif, je me retrouve ainsi :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TypePrime implements XXX {

    /*...*/
    private boolean calculee;

    /*...*/

    public boolean isCalculee() {
        return this.calculee;
    }

    public void setCalculee(boolean calculee) {
        this.calculee = calculee;
    }
}

Je vais à nouveau sur ma nouvelle page de test, et là surprise ! Ça marche !

Etant tout de même désireux de mieux comprendre, je cherche la raison et je retourne voir la spéc. des JavaBeans.

Chapitre 8.3.2, on lit :

In addition, for boolean properties, we allow a getter method to match the pattern:

public boolean is‹PropertyName›();

This “is‹PropertyName›” method may be provided instead of a “get‹PropertyName›” method, or it may be provided in addition to a “get‹PropertyName›” method.

In either case, if the “is‹PropertyName›” method is present for a boolean property then we will use the “is‹PropertyName›” method to read the property value.

En résumé, le getter “isXXX()” est pris en compte que pour le type primitif boolean et non son wrapper.

Enfin pour finir, si on aurait pas voulu changer le type de son attribut, il aurait fallu créer la méthode

1
2
3
public Boolean getCalculee() {
    return this.calculee;
}

Ça fonctionne également :D !

Je suis allé vérifié dans le bouquin de la SCJP et c’est bien écrit également, chapitre 1, paragraphe “JavaBeans Standards” => J’arrête l’article !

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share
Ce contenu a été publié dans Java. Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire