在Struts2 / OGNL页面中,是否可以根据条件将任何类型的bean分配给对象?
例如,
<s:if test"%{customer != null}">
<s:set var="someobject" value="customer">
</s:if>
<s:else>
<s:set var="someobject" value="user">
</s:else>
答案 0 :(得分: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 :(得分:1)
set tag将值堆栈上下文中的变量存储为映射。因此,可以在var
属性中指定的键下设置任何对象。如果您在具有set标记的页面上频繁使用相同的键,则它将覆盖先前的值集。例如
<s:set var="someobject" value="customer">
<s:set var="someobject" value="user">
之后,如果您使用user
引用,则只能检索someobject
个对象。
关于参考文献,您可以阅读OGNL文档。
框架使用标准命名上下文来评估OGNL 表达式。处理OGNL的顶级对象是
Map
(通常是 称为上下文映射或上下文)。 OGNL有一个概念 作为上下文中的根(或默认)对象。在表达中, 可以在没有任何引用的情况下引用根对象的属性 特殊的“标记”概念。对其他对象的引用标有a 英镑符号(#
)。
使用上面的示例,您可以使用对someobject
的引用来获取user
属性name
。
Hello, <s:property value="#someobject.name"/>