Si une propriété d'objet est déclarée comme de type booléen (non primitive booléen), il semble y avoir un problème dans el reconnaissant!
Dites que vous avez l'objet suivant P>
<td>Object is ${case.valid ? "Valid":"Invalid"} </td>
3 Réponses :
Tous les exemples que j'ai jamais vus parler de Je ne trouve aucune référence "officielle" à ce comportement, mais Ce blog post semble décrire ce que je soupçonnais quand j'ai commenté initialement - un Je soupçonne donc que, dans votre exemple, si vous avez changé le type de retour de Boolean code> Les propriétés permettent aux getters du formulaire
isproperty () code> en plus de
getProperty () code > et jamais
booléen code> s. p>
boolean code> est un objet alors qu'un
booléen code> est une primitive et tandis que Java a automatiquement Boxe, el ignorera le
isproperty () code> getter qui renvoie un
booléen code> et va plutôt chercher un
getProperty () code> méthode. p >
isvalid () code> à
booléen code> au lieu de
booléen code> (mais Laissez le type de champ comme
booléen code>), votre expression EL fonctionnera comme vous vous attendez. P>
Le poteau de blog n'existe pas.
Excellente pensée, à propos de Boolean / Boolean et est / get. Cela m'a vraiment aidé. +1 ici et +1 sur une autre réponse de la tienne. Mais le blog mentionné n'existe plus et qui sait où pouvons-nous avoir une information complète, sur des variantes avec la fixation B / Boolean pour les champs et les fonctions et arguments, et le comportement peut être différent pour différents serveurs s'il n'est pas décrit dans les documents. .. BTW, selon mes expériences, Boolean pour Is ... n'a pas fonctionné, seulement booléen pour obtenir ... (JBoss)
el traite booléen comme un objet (totalement correct) afin qu'il recherche Essayez de changer de propriété de getvalid () code> méthode. Ceci est cohérent avec la spécification JavaBeans. P>
Boolean code> Type de référence à
Boolean code> Type primitif. Si cela n'est pas possible et que vous utilisez de nouveaux EL (c'est-à-dire 2.2 - Je ne suis pas sûr d'environ 2.1), vous pouvez appeler une méthode, donc
$ {casvalid ()} code> serait un exemple d'une utilisation correcte de cette nouvelle fonctionnalité EL. P>
Certaines combinaisons de getters sont / getters, des champs booléens / booléens et des getters booléens / booléens sont autorisés ou interdits par JSP. Il est comme suit:
Combinaisons interdites: P>
private Boolean code_FMI = true, code_FmI = true, code_FMG = true, code_FmG = true; private boolean code_fMI = true, code_fmI = true, code_fMG = true, code_fmG = true; public Boolean isCode_FMI() { return code_FMI; } public boolean isCode_FmI() { return code_FmI; } public Boolean getCode_FMG() { return code_FMG; } public boolean getCode_FmG() { return code_FmG; } public Boolean isCode_fMI() { return code_fMI; } public boolean isCode_fmI() { return code_fmI; } public Boolean getCode_fMG() { return code_fMG; } public boolean getCode_fmG() { return code_fmG; }
Je suis un utilisateur noob jsp, mais le
privé code> dans votre
valide code> déclaration de variable d'objet signifie que vous ne pouvez pas y accéder directement?
Oui, cela est vrai dans Java World, mais avec el, vous pouvez accéder à des propriétés d'objet à l'aide de style Javabean (objet.propertyname) à condition que vous avez fourni un getter (isvalid dans ce cas). Alors, quand vous dites cas.valid, vous appelez effectivement cas.isvalid (). Vous pouvez voir que si je change booléen à Boolean, cela fonctionne bien.
Donc, si vous appelez la méthode
isvalid () code>, cela ne fonctionne pas aussi bien?
Vous ne pouvez pas appeler Isvalid () en El, comme je l'ai dit, vous utilisez l'objet de style JavaBean Accessing Occre.PropertyName.
Donc, je suppose que ma prochaine question est, si vous modifiez cette déclaration au public, cela ne fonctionne pas? (juste vérifier)
Non, vous n'accédez pas directement à la propriété directement, vous y accédez via cas.isvalid (0 mais le moyen de le faire à El est en disant cas.valid.
Je te prendrai au mot. Je ne sais pas assez près de cela pour le faire valoir, merci d'avoir pris le temps d'expliquer.
Pas tout à fait certain ici, mais je suppose que si vous ajoutez un
getvalid () code> méthode qui déléguette à
isvalid () code>, il devrait fonctionner.