etiquetas jsp struts2 ognl struts-tags

jsp - etiquetas de struts 2



¿Cuál es la diferencia entre los signos#,% y $ en las etiquetas Struts? (3)

Estoy trabajando con Struts2 y cuando estoy accediendo a las variables de la pila de valores no sé si usar % o # o $ . Intento todos hasta que encuentre el correcto.

¿Alguien puede explicar cuál es la diferencia entre estos?


El marco utiliza un contexto de nomenclatura estándar para evaluar expresiones OGNL. El objeto de nivel superior que trata con OGNL es un Mapa (generalmente referido como un contexto de contexto o contexto). OGNL tiene una idea de que haya un objeto raíz (o predeterminado) dentro del contexto. En expresión, las propiedades del objeto raíz se pueden referenciar sin ninguna noción especial de "marcador". Las referencias a otros objetos están marcadas con un signo de almohadilla (#).

El marco establece el contexto OGNL para ser nuestro ActionContext, y la pila de valores para ser el objeto raíz OGNL. (La pila de valores es un conjunto de varios objetos, pero para OGNL parece ser un solo objeto.) Junto con la pila de valores, la estructura coloca otros objetos en el ActionContext, incluidos Mapas que representan la aplicación, la sesión y los contextos de solicitud. Estos objetos coexisten en ActionContext, junto con la pila de valores (nuestra raíz OGNL).

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

remítalo para más detalles

Base OGNL

básicamente struts2 poner el valor del objeto Stack como el máximo objeto y OGNL para referirlos. El objeto raíz se puede referenciar sin ningún "marcador" especial o con % mientras que las referencias a otros objetos se marcan con un signo de libra (#). # se usa básicamente para referir objetos / valores de la aplicación / sesión, etc.


Solo para completar el @Devon Biere ...

Uso de $ (signo de dólar)

También puede usar ${} en sus archivos de recursos. Los puntales automáticamente usarán OGNL para analizar ${} . Por ejemplo

sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName}

Tenga en cuenta que el signo $ aquí es solo un disparador que le pide a los struts que evalúen la cadena contra OGNL, por favor no la confundan con ${} en JSTL.

Struts 2 Mensaje dinámico con OGNL


Uso de # (signo de libra)

OGNL se usa para referirse a los objetos en ActionContext de la siguiente manera:

  • objectName : objeto en la ValueStack (objeto predeterminado / raíz en el contexto OGNL), como una propiedad de Acción
  • #objectName : objeto en ActionContext pero fuera de ValueStack, específicamente ...
    • #objectName : objeto ActionContext que se ha creado utilizando las etiquetas de datos Struts2 con el alcance de acción predeterminado (por ejemplo, <s:set name="foo" value="''Testing''" /> , referenciado por <s:property value="#foo" /> )
    • #parameters.objectName : parámetro de solicitud
    • #request.objectName : atributo de ámbito de solicitud
    • #session.objectName : atributo de ámbito de sesión
    • #application.objectName : atributo con ámbito de aplicación
    • #attr.objectName : atributo en la página, solicitud, sesión o alcance de la aplicación (buscado en ese orden)

Las referencias del mapa del ámbito anterior (parámetros, solicitud, sesión y aplicación) se pueden realizar de dos maneras:

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

Uso de% (signo de porcentaje)

%{ OGNL expression } se usa para forzar la evaluación OGNL de un atributo que normalmente se interpretaría como un literal String.

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

Uso de @ (en el signo)

El símbolo @ se usa para hacer referencias a propiedades y métodos estáticos. Tenga en cuenta que puede necesitar habilitar esto en sus propiedades de Struts2: struts.ognl.allowStaticMethodAccess=true

Ejemplos:

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

Uso de $ (signo de dólar)

Struts2 OGNL no hace un uso especial del signo de dólar. Sin embargo, se puede usar para evaluar expresiones JSTL normales. Por ejemplo:

Struts2: <h1><s:property value="#pageTitle" /></h1>
(es equivalente a...)
JSTL: <h1>${pageTitle}</h1>