gpt4 book ai didi

java - 如何使用 OGNL 索引引用运算符

转载 作者:行者123 更新时间:2023-11-30 03:52:59 24 4
gpt4 key购买 nike

使用 OGNL,您可以引用操作上下文对象,例如 #application#session#root#action#request#parameters#attr 以及 #context 的操作上下文。

The framework sets the OGNL context to be our ActionContext, and the value stack to be the OGNL root object.

OGNL 使用 [] 作为索引引用来访问对象属性。例如,如果对象 foo 具有属性 bar 那么它可以像 foo.barfoo['bar']。如果 foo 是一个 map 并且 bar 是一个键,它也可以工作。

现在,我想将一个变量和一个值放入值堆栈上下文中

<s:set var="bar" value="'hello'"/>
<s:set var="foo" value="'bar'"/>

并打印该值

<s:property value="%{#attr[#foo]}"/>

它应该打印hello

我想知道这是如何工作的。我知道 #attr 是一个没有 #foo 引用的属性的对象,即 bar。然而这有效。如果我使用 #request#context,并且可能使用 #root 而不是 #attr,它也可以工作。这两个对象都没有属性 bar,但 OGNL 不这么认为。我想知道 OGNL 对它引用的对象的属性有何看法以及为什么这个表达式有效。另外,是否有其他方法可以在 OGNL 表达式中使用 #foo 引用打印 hello

最佳答案

在给定的表达式 <s:property value="#attr[#foo]"/> 中里面的部分[]将首先进行评估。 #foo解析为bar所以表达式变成 #attr['bar'] (相当于 #attr.bar )。

使用#attr.bar bar 的值将进行搜索,直到在页面上下文中找到它,然后在 request 中找到它。 ,然后在 session然后在 application范围。

#context.bar使用键 bar 从 OGNL 上下文值映射中获取值。

#request.bar尝试获取名称为 bar 的请求属性从请求映射中,如果没有找到则 bar将在值堆栈中搜索。这发生在 Struts2 请求包装器实现中。

关于java - 如何使用 OGNL 索引引用运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919226/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com