0

我在 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[] 数组返回。

有什么建议吗?

4

1 回答 1

1

不要走那条路。它可能在某些情况下有效,但它只不过是一个疯狂的黑客攻击。它会在某些情况下中断。

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

恕我直言,显示个人内容是一个最好封装在 portlet 中的业务逻辑 - 您可以将 portlet 嵌入主题中,以便它们自动显示在每个页面上。如果不需要,portlet 也可以实现为不显示任何内容。将花哨的 CSS 添加到您的主题(正是针对此 portlet)以使其显得特别。例如 Liferay 的停靠栏或聊天 portlet:两者都是带有精美 CSS 的 portlet:它们看起来不像 portlet,但确实如此。它们会自动嵌入到每个页面中。

分离关注点,在 portlet 中有实际内容和个人数据。你未来的维护者会感谢你(即使只有未来的你会感谢你)

于 2015-02-24T14:59:13.940 回答