是的,可以。但你确定你应该这样做吗?
这似乎是业务,而不是表示,因此为什么在视图中而不是在控制器中?
而不是
<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}" />
当您的操作对对象一无所知时,您的用例更合适,但随后您将在视图中放入大量业务逻辑...
<s:set>
标签将变量存储在作为映射的值堆栈上下文中。因此任何对象都可以设置在 var
属性中指定的键下。如果您在带有 <s:set>
标签的页面上频繁使用相同的键,那么它将覆盖之前设置的值。例如
<s:set var="someobject" value="customer">
<s:set var="someobject" value="user">
之后,如果您使用
user
引用,则只能检索 someobject
对象。
关于参考资料,您可以阅读OGNL文档。
该框架使用标准命名上下文来评估 OGNL 表达式。处理 OGNL 的顶级对象是
(通常 称为上下文映射或上下文)。 OGNL 有一个概念 是上下文中的根(或默认)对象。在表达上, 无需任何属性即可引用根对象的属性 特殊的“标记”概念。对其他对象的引用标有 英镑符号 (Map
)。#
使用上面的示例,您可以使用对
someobject
的引用来获取 user
属性 name
。
Hello, <s:property value="#someobject.name"/>