2008-11-25 6 views
0

je suis tombé sur le balisage suivant dans un fichier JSP dans une application héritage que je maintiens:Des espaces sont-ils autorisés dans l'attribut name d'une logique Struts: tag égal?

<logic:equal name="welcome memberInfoView" property="hasFoo" value="false"> 

Ce attribut name est très mal pour moi. Basé sur ce que j'ai lu dans les documents Struts, cet espace n'est pas autorisé.

Est-ce légal? Si oui, que ferait-il? Sinon, quelle pourrait être l'intention?

EDIT: Après quelques recherches supplémentaires, j'ai trouvé que "welcome memberInfoView" était bien intentionnellement utilisé comme nom d'attribut (avec l'espace).

Répondre

2

En fait, ce nom est légal, mais non conventionnel. Bien que d'un point de vue syntaxique, il peut s'agir d'un bug. Le "nom" spécifie un nom d'attribut dans une certaine portée (déterminé par l'attribut optionnel "scope", qui est par défaut "any"), pas un nom de variable de script. Comme il s'agit effectivement d'une clé dans une carte, il peut s'agir de n'importe quelle chaîne de caractères.

Cette balise commence dans le contexte de la page et recherche un attribut nommé "welcome memberInfoView". Il continuera à inclure des étendues jusqu'à ce que l'objet nommé soit trouvé. Ensuite, il regardera la propriété "hasFoo" de cet objet. Si c'est "faux", le fragment inclus sera invoqué.

Une autre chose qui semble incorrecte est la propriété "hasFoo". Normalement, la propriété serait simplement "foo", et l'objet devrait avoir un accesseur appelé isFoo() ou getFoo(). Peut-être que la balise logique est indulgente à cet égard, et utilisera avec succès la méthode hasFoo().

Vous pouvez créer un test simple pour cet usage, et assurez-vous qu'il fonctionne comme prévu.

Questions connexes