Como usar o operador de referência de índice OGNL
Trabalhando com OGNL, você pode fazer referência a objetos de contexto de ação como#application
, #session
,#root
, #action
,#request
,#parameters
,#attr
e o contexto de ação com#context
.
A estrutura define o contexto OGNL como ActionContext e a pilha de valores como objeto raiz OGNL.
E o OGNL usa[]
como referência de índice para acessar as propriedades de um objeto. Por exemplo, se o objetofoo
tem uma propriedadebar
então ele pode acessar comofoo.bar
oufoo['bar']
. Também funciona sefoo
é um mapa ebar
é uma chave.
Agora, quero colocar uma variável e um valor no contexto da pilha de valores assim
<s:set var="bar" value="'hello'"/>
<s:set var="foo" value="'bar'"/>
e imprima o valor
<s:property value="%{#attr[#foo]}"/>
Deve imprimirhello
.
Eu gostaria de saber como isso funciona. Eu sei disso#attr
é um objeto que não possui uma propriedade referenciada por#foo
, ou seja,bar
. No entanto, isso funciona. Também funciona se eu usar#request
e#context
e provavelmente#root
ao invés de#attr
. Nenhum desses objetos tem uma propriedadebar
, mas o OGNL pensa de outra forma. Gostaria de saber o que o OGNL pensa sobre a propriedade do objeto que ele faz referência e por que essa expressão está funcionando. Além disso, se houver maneiras alternativas de imprimirhello
usando#foo
referência na expressão OGNL.