2010-11-09 8 views
2

Quelle est la différence entre la fonction LENGTH[...] et la fonction JSTL fn:length(...)?Différence entre LONGUEUR [...] et fn: longueur (...) dans JSP EL

J'ai essayé de chercher la différence mais je n'ai vu aucun exemple utilisant le premier.

Voici un exemple:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 
    <td valign="top"> 
     .....print something 
    </td> 
</c:when> 
+1

Peut-être parce que le premier n'existe pas? Où as-tu lu/entendu/vu à propos du premier? N'est-ce pas juste une mauvaise interprétation de votre part? La notation d'accolade '[]' est souvent utilisée pour accéder aux propriétés par des clés dynamiques. – BalusC

+0

En fait, à mon travail, ils m'ont demandé de changer chaque instance de LONGUEUR [..] pour utiliser la fonction jstl length. et le code est en production, donc je sais que ça fonctionnait ... Je n'ai pas pu trouver la LONGUEUR [] en recherchant sur Google car google ignore toujours le [] et finit par retourner la fonction régulière fn: longueur – Sammy

+0

Copypaste du code exemples où cela a été utilisé. – BalusC

Répondre

7

Comme il n'y a pas une telle fonction comme LENGTH[...] dans la norme JSP/JSTL/EL, il est impossible de parler des différences. Le fn:length() est le seul moyen d'obtenir la longueur d'un String, un Object[] ou un Collection.

${fn:length(someCollection)} 

Mise à jour selon votre (fixe) Exemple:

<c:when test="${object.field ne null || LENGTH[object.field] > 0}"> 

Je ne l'ai jamais vu auparavant. Il semble que votre webapp/servletcontainer utilise un résolveur EL personnalisé. Si cela est vrai, vous devriez le voir déclaré dans le fichier web.xml de webapp. Quoiqu'il en soit, vous préférez utiliser le mot-clé EL empty ici. Il vérifie non seulement null, mais aussi pour la longueur de String, Object[] ou Collection.

<c:when test="${not empty object.field}"> 

Pas besoin de fn:length() ici.


La notation accolade [] est à son tour par la voie souvent utilisée pour accéder aux propriétés par touches dynamiques. Par exemple.

${bean[propertyname]} 

Si propertyname décide "foo", le ci-dessus effectivement la même que ${bean.foo}. Il est également souvent utilisé sur Map objets de la portée.

+0

Puisque vous êtes confiant quant à la réponse, je vais supposer que le code qui avait la LONGUEUR [] n'a jamais été exécuté (c'est-à-dire entourant si jamais vrai), c'est pourquoi il ne cassait rien. Merci beaucoup pour la réponse rapide. – Sammy

+0

Je voudrais cependant inclure quelques exemples dans la question. Cela pourrait être une mauvaise interprétation de votre part. Peut-être qu'ils voulaient simplement remplacer le scriptlet '<% ​​= array.length%>' par EL '$ {fn: length (array)}'. – BalusC

+0

J'ai ajouté un exemple du code de production. – Sammy

Questions connexes