2014-10-03 104 views
2

在Struts2/OGNL页面中,是否可以根据条件将任何类型的bean分配给对象?OGNL/Struts2 JSP将bean分配给对象

例如,

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

是什么问题? – 2014-10-06 07:18:12

+0

我没有找到任何类似的例子,我也不知道它是否有效。我必须根据它的工作原理来决定设计! – 2014-10-06 20:29:16

回答

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

很好的答案。谢谢! – 2014-10-06 14:35:08

+0

'%{someobject.class.name}'实际上工作吗?我试过了。但它不 – 2014-10-07 02:44:23

+1

+1最佳实践ftw。 – 2014-10-07 07:46:00

1

在作为地图值堆上下文中的set tag存储变量。因此,可以在var属性中指定的键下设置任何对象。如果您在带有设置标签的页面上频繁使用相同的按键,则会覆盖之前设置的值。例如

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

后,如果您使用someobject参考你只能检索user对象。

关于您可以阅读的参考文献OGNL文档。

该框架使用标准的命名上下文来评估OGNL 表达式。处理OGNL的顶级对象是Map(通常为 ,被称为上下文映射或上下文)。 OGNL有一个概念 是上下文中的根(或默认)对象。在表达式中,根对象的属性可以在没有任何 特殊“标记”概念的情况下被引用。对其他物体的引用标有 井号(#)。使用上面的例子

可以使用参考someobject获得user财产name

Hello, <s:property value="#someobject.name"/> 
+0

请您详细说明最后一句话吗? – 2014-10-03 20:50:15

+0

你有最后一句话吗? – 2014-10-06 17:41:07

+0

是的。谢谢。现在清楚了! – 2014-10-06 20:28:17

相关问题