OGNL / Struts2 JSP将bean分配给对象

时间:2014-10-03 20:30:28

标签: jsp struts2 ognl

在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>

2 个答案:

答案 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"/>