2015-02-24 173 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