Quelle est la différence entre les signes #, % et $ dans les étiquettes de Struts?
je travaille avec Struts2 et quand j'accède aux variables de la pile de valeurs, Je ne sais pas si je dois utiliser %
ou #
ou $
. Je les ai toutes essayées jusqu'à ce que je trouve la bonne.
est-ce que Quelqu'un peut expliquer quelle est la différence entre ceux-ci?
3 réponses
utilisation de # (signe de La Livre)
OGNL est utilisé pour se référer aux objets dans le contexte D'action comme suit:
-
objectName
: objet dans le ValueStack (par défaut/objet racine dans la OGNL contexte), comme une propriété Action -
#objectName
: objet dans le contexte de L'action mais en dehors de L'objet de la valeur, spécifiquement...-
#objectName
: ActionContext objet qui a été créé en utilisant les balises de données Struts2 avec le champ d'action par défaut (par exemple,<s:set name="foo" value="'Testing'" />
, référencé par<s:property value="#foo" />
) -
#parameters.objectName
: paramètre de requête -
#request.objectName
: attribut request-scoped -
#session.objectName
: session-scoped attribut -
#application.objectName
: portée application de l'attribut -
#attr.objectName
: attribut dans la page, la requête, la session ou l'application champ d'application (recherché dans cet ordre)
-
les références cartographiques scopées ci-dessus (paramètres, demande, session, et application) peuvent être faites de deux façons:
-
#scopeName.objectName
ou -
#scopeName['objectName']
Utilisation du signe % (pourcentage)
%{ OGNL expression }
est utilisé pour forcer OGNL l'é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 @ (au signe)
le symbole @ est utilisé pour faire référence aux propriétés et aux méthodes statiques. Notez que vous pourriez avoir besoin d'activer ceci dans vos propriétés Struts2: struts.ognl.allowStaticMethodAccess=true
exemples:
@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod
utilisation de $ (signe en dollars))
Struts2 OGNL ne pas faire usage spécial de la signe de dollar. Cependant, il peut être utilisé pour évaluer les expressions JSTL normales. Par exemple:
Struts2: <h1><s:property value="#pageTitle" /></h1>
(est équivalent à...)
JSTL: <h1>${pageTitle}</h1>
le framework utilise un contexte de nommage standard pour évaluer les expressions OGNL. L'objet de premier niveau traitant D'OGNL est une carte (généralement appelée carte de contexte ou contexte). OGNL a une notion de l'existence d'un objet root (ou par défaut) dans le contexte. Dans l'expression, les propriétés de l'objet racine peuvent être référencées sans aucune notion particulière de "marqueur". Les références à d'autres objets sont marquées d'un signe de livre (#).
le cadre définit le contexte OGNL à être notre ActionContext, et la pile de valeur pour être l'objet racine D'OGNL. (La pile de valeurs est un ensemble de plusieurs objets, mais pour OGNL il semble être un seul objet. En plus de la pile de valeurs, le framework place d'autres objets dans le Contextd'action, y compris des cartes représentant les contextes application, session et request. Ces objets coexistent dans le Contexted'action, à côté de la pile de valeurs (notre racine OGNL).
|
|--application
|
|--session
context map---|
|--value stack(root)
|
|--request
|
|--parameters
|
|--attr (searches page, request, session, then application scopes)
consultez ce pour plus de détails
fondamentalement struts2 mettent la pile de valeur de l'objet comme la plupart des objets et OGNL est utilisé pour les référer.l'objet racine peut être référencé sans aucun "marqueur" spécial ou avec %
tandis que les références à d'autres objets sont marquées avec un signe de livre (#). # est essentiellement utilisé pour renvoyer objet / valeurs de L'Application / Session etc.
juste pour compléter la @Devon Biere ...
utilisation de $ (signe en dollars)
vous pouvez aussi utiliser ${}
dans vos fichiers de ressources. Les struts utiliseront automatiquement OGNL pour analyser ${}
. Par exemple
sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack
sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName}
s'il vous plaît noter le signe $
voici juste un déclencheur qui demande aux struts d'évaluer la chaîne par rapport à OGNL, s'il vous plaît ne le confondez pas avec ${}
dans JSTL