79 votes

Quelle est la différence entre les signes #,% et $ dans les tags Struts?

Je travaille avec Struts2 et lorsque j'accède aux variables de la pile de valeur, je ne sais pas s'il faut utiliser % ou # ou $ . Je les essaie tous jusqu'à ce que je trouve le bon.

Quelqu'un peut-il expliquer quelle est la différence entre ceux-ci?

116voto

Devon Biere Points 706

L'utilisation de # (dièse)

OGNL est utilisé pour faire référence à des objets dans le ActionContext comme suit:

  • objectName: objet dans la ValueStack (par défaut/objet racine dans la OGNL contexte), comme une Action de la propriété
  • #objectName: objet dans la ActionContext mais à l'extérieur de la ValueStack, plus précisément...
    • #objectName: ActionContext objet qui a été créé à l'aide de la Struts2 balises de données avec l'action par défaut de la portée (par exemple, <s:set name="foo" value="'Testing'" />, référencé par <s:property value="#foo" />)
    • #parameters.objectName: paramètre de la requête
    • #request.objectName: demande d'étendue de l'attribut
    • #session.objectName: session dont l'étendue est un attribut
    • #application.objectName: portée application de l'attribut
    • #attr.objectName: attribut dans la page, request, session, ou la portée d'application (recherché dans cet ordre)

L'étendue de la carte des références ci-dessus (paramètres de la demande, la session, et la demande) ne peut être effectué de deux façons:

  • #scopeName.objectName ou
  • #scopeName['objectName']

L'utilisation de % (pour cent)

%{ OGNL expression } est utilisé pour forcer OGNL évaluation d'un attribut qui serait normalement être interprété comme une Chaîne littérale.

Exemple: <s:property value="myProperty" default="%{myDynamicDefaultValue}" />

Utilisation de @ (arobase)

Le symbole @ est utilisé pour faire référence à des propriétés et de méthodes statiques. Notez que vous devrez peut-être activer cette fonction dans votre Struts2 propriétés: struts.ognl.allowStaticMethodAccess=true

Exemples:

@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod

Utilisation de $ (signe dollar)

Struts2 OGNL ne pas faire usage spécial de la signe de dollar. Cependant, il peut être utilisé pour évaluer la normale JSTL expressions. Par exemple:

Struts2: <h1><s:property value="#pageTitle" /></h1>
(est équivalent à...)
JSTL: <h1>${pageTitle}</h1>

10voto

Umesh Awasthi Points 13168

Le cadre utilise un standard contexte de nommage pour évaluer OGNL expressions. Le haut niveau d'objet de traiter avec OGNL est une Carte (généralement appelé un contexte de carte ou de contexte). OGNL a une notion de l'existence d'une racine (ou par défaut) d'un objet dans le contexte. Dans l'expression, les propriétés de l'objet racine peut être référencé sans "marqueur" de la notion. Des références à d'autres objets sont marqués par un signe dièse (#).

Le cadre définit la OGNL contexte de notre ActionContext, et la valeur de la pile à l'OGNL objet racine. (La valeur de la pile est un ensemble de plusieurs objets, mais à OGNL il semble être un objet unique.) Avec la valeur de la pile, le cadre des lieux autres objets dans le ActionContext, y compris les Cartes représentant l'application, session, et demande contextes. Ces objets coexistent dans la ActionContext, à côté de la valeur de la pile (à notre OGNL racine).

                 |
                 |--application
                 |
                 |--session
   context map---|
                 |--value stack(root)
                 |
                 |--request
                 |
                 |--parameters
                 |
                 |--attr (searches page, request, session, then application scopes)

consultez cette pour plus de détails

OGNL base

fondamentalement, struts2 mettre la valeur de l'objet de la Pile comme plus haut objet et OGNL est utilisé pour se référer à eux.racine objet peut être référencé sans "marqueur" ou avec % alors que les Références à d'autres objets sont marqués par un signe dièse (#). # est essentiellement utilisé pour désigner des objets/valeurs à partir de l'Application/Session etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X