2014-10-03 102 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