JSTL Langage d'Expression accéder aux propriétés de l'objet
J'ai été à la suite d'un tutoriel d'aujourd'hui qui m'a fait me gratter la tête pendant une heure. Considérer:
public class MyClass {
public int getTotal() {
amount = 100;
return amount;
}
}
et un extrait d'une page JSP:
<p>Total: ${objectOfTypeMyClass.total}</p> //object instantiated elsewhere
Nulle part dans le code a été une variable d'instance nommée "total" jamais déclaré ni utilisé. La seule référence au mot "total" dans l'ensemble du projet (autre que dans le JSP) a été la méthode getTotal().
Après quelques désespérée ultime de l'expérimentation, il apparaît que l'Expression de la Langue évalue ${someObject.var} que "appeler le getVar() méthode de la someObject objet.
J'ai travaillé avec ce long tutoriel pour plus d'une semaine en pensant que ${someObject.var} a dit, "directement chercher les sauvés variable d'instance "var" de someObject.
Je n'ai eu mal tout le temps et est de mon observation correcte que dans le but de référencer n'importe quelle variable d'instance à l'aide de EL, vous devez fournir un correspondant de la méthode de lecture nommée getVarname() où "Varname" est le nom de la variable d'instance?
Aussi, EL semble être sensible à la casse à cet égard. Dans mon exemple ci-dessus, "total" dans ${objectOfTypeMyClass.total} est en minuscules, où la méthode getTotal() a un grand "T".
Et pendant que nous y sommes, pourquoi n'avons-nous pas besoin d'instancier la variable "total"? Je suppose que EL n'est pas fait référence à une variable d'instance...juste une méthode de lecture?
Ce qui donne?
OriginalL'auteur ChrisM | 2010-09-22
Vous devez vous connecter pour publier un commentaire.
C'est correct. EL adhère la JavaBeans spécification comme décrit dans la EL spécification.
Non, ce n'est certainement pas insensible à la casse. Il est spécifié comportement.
${bean.Total}
n'aurait pas fonctionné.C'est parce que c'est censé respecter le Javabean spécification.
Tous avec tous, de lire les deux spécifications et tout sera clair 🙂
Voir aussi:
OriginalL'auteur BalusC
La
.
dansobjectOfTypeMyClass.total
est la JSTL EL Opérateur Point. Il peut faire des trucs un peu différents. Y compris:map.key
accédé à une valeur demap
stockées souskey
. ouobject.property
accèdeproperty
deobject
à l'aide de "JavaBeans" conventions.OriginalL'auteur z5h
Cela devrait fonctionner:
OriginalL'auteur Randall Kwiatkowski