在 Struts 2 的 JSP 页面上使用 OGNL 根据条件将 bean 分配给对象

问题描述 投票:0回答:2
jsp parameters struts2 ognl struts-tags
2个回答
2
投票

是的,可以。但你确定你应该这样做吗?

这似乎是业务,而不是表示,因此为什么在视图中而不是在控制器中?

而不是

<s:if test"%{customer != null}">
     <s:set var="someobject" value="customer">
</s:if>
<s:else>
     <s:set var="someobject" value="user">
</s:else>

SomeObject is of type : <s:property value="%{#someobject.class.name}" />

你可以在你的行动中使用

public String getSomeobject(){
    return (customer!=null) ? customer : user;
}

并且仅在 JSP 中

SomeObject is of type : <s:property value="%{someobject.class.name}" />

当您的操作对对象一无所知时,您的用例更合适,但随后您将在视图中放入大量业务逻辑...


1
投票

<s:set>
标签将变量存储在作为映射的值堆栈上下文中。因此任何对象都可以设置在
var
属性中指定的键下。如果您在带有
<s:set>
标签的页面上频繁使用相同的键,那么它将覆盖之前设置的值。例如

<s:set var="someobject" value="customer">
<s:set var="someobject" value="user">

之后,如果您使用

user
引用,则只能检索
someobject
对象。

关于参考资料,您可以阅读OGNL文档。

该框架使用标准命名上下文来评估 OGNL 表达式。处理 OGNL 的顶级对象是

Map
(通常 称为上下文映射或上下文)。 OGNL 有一个概念 是上下文中的根(或默认)对象。在表达上, 无需任何属性即可引用根对象的属性 特殊的“标记”概念。对其他对象的引用标有 英镑符号 (
#
)。

使用上面的示例,您可以使用对

someobject
的引用来获取
user
属性
name

Hello, <s:property value="#someobject.name"/>
© www.soinside.com 2019 - 2024. All rights reserved.