OGNL/Struts2 JSP将bean分配给对象
在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>
是的,你可以。但你确定你应该吗?
这似乎是业务,而不是演示文稿,因此为什么在视图中而不是在控制器中?
而不是
<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}" />
你使用的情况下更适合当你的行动完全不了解您对象,但你会把很多在视图中的业务逻辑...
很好的答案。谢谢! – 2014-10-06 14:35:08
'%{someobject.class.name}'实际上工作吗?我试过了。但它不 – 2014-10-07 02:44:23
+1最佳实践ftw。 – 2014-10-07 07:46:00
在作为地图值堆上下文中的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"/>
请您详细说明最后一句话吗? – 2014-10-03 20:50:15
你有最后一句话吗? – 2014-10-06 17:41:07
是的。谢谢。现在清楚了! – 2014-10-06 20:28:17
是什么问题? – 2014-10-06 07:18:12
我没有找到任何类似的例子,我也不知道它是否有效。我必须根据它的工作原理来决定设计! – 2014-10-06 20:29:16