在portal_normal.vm中调用Java方法

时间:2015-02-24 12:20:06

标签: liferay velocity liferay-theme liferay-velocity

我在Liferay中实现了一个主题。我在控制面板上有一个表单portlet,用户可以填写。根据portlet中插入的值,主题主页应以不同的方式显示。

我正在考虑使用类似的东西,但它不起作用:

#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"是"配置"中定义的方法。输入long和String []数组返回的类。

有任何建议吗?

1 个答案:

答案 0 :(得分:1)

不要沿着这条路走。它可能在一些情况下起作用,但它只不过是一个疯狂的黑客攻击。它会在某些条件下破裂。

请记住,您的主题可能位于与您的portlet不同的类加载器中 - 因此您的com.mypackage.utils.Configuration类可能甚至不可用。

IMHO显示个人内容是一个最好的封装在portlet中的业务逻辑 - 你可以在一个主题中嵌入portlet,以便它们自动显示在每个页面上。如果不需要,也可以将portlet实现为不显示任何内容。为您的主题添加花哨的CSS(正是为了这个portlet),使它看起来很特别。例如Liferay的dockbar或chat portlet:两者都是带有花哨CSS的portlet:它们看起来不像portlet,但实际上它们都是。并且它们会自动嵌入到每个页面中。

单独关注,在portlet中包含实际内容和个人数据。你未来的维护者会感谢你(即使它只是未来你会感谢你)