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