2015-02-24 11 views
0

我在Liferay中實現了一個主題。我在控制面板上有一個用戶可以填寫的表單portlet。根據portlet中插入的值,主題主頁應該以不同的方式顯示。在portal_normal.vm中調用Java方法

我想用類似的東西,但它不工作:

#set($typeLong = $portal.getClass().forName('java.lang.Long').getField('TYPE').staticValue) 
#set($personalOptions = $portal.getClass().forName("com.mypackage.utils.Configuration").getMethod("getStrings", $typeLong).invoke(null,$scopeGroupId)) 

在我的「getStrings」是在「配置」類中定義的輸入長和字符串的方法[]數組返回。

任何建議?

回答

1

不要沿着這條路線走。它可能在幾種情況下工作,但它只不過是一個瘋狂的黑客。它會在某些條件下破裂。

請記住,您的主題可能與您的portlet不在同一個類加載器中 - 因此您的com.mypackage.utils.Configuration類甚至可能無法使用。

恕我直言展示的個人內容是一個最好的封裝在一個portlet中的業務邏輯 - 您可以將portlet嵌入到主題中,以便它們自動顯示在每個頁面上。如果不需要,portlet也可以實現不顯示任何內容。添加花哨的CSS到你的主題(正是這個portlet),使其顯得特別。比如像Liferay的dockbar或chat portlet:兩者都是花哨的CSS的portlet:它們看起來不像portlet,但實際上它們是。它們會自動嵌入到每個頁面中。

單獨的問題,在portlet中有實際的內容和個人數據。你的未來維護者會感謝你(即使它只是將來你會感謝你)

+0

是的,我理解你的問題,但仍然不明白你提出的替代方案,我的實際關切。 – user73793 2015-02-24 17:08:43

+0

請描述您想要展示什麼樣的個人信息 - 那麼建議替代實施會更容易。 – 2015-02-25 10:11:33

+0

我已經解決了這個問題......我的問題是我錯過了velocity.engine.restricted.classes =在門戶屬性 – user73793 2015-02-25 10:26:35