如何在使用BeanLocator找到的对象上调用方法

时间:2012-02-23 15:00:47

标签: java spring object liferay

我正在使用Liferay,但我想这更像是一个Spring问题。

在Liferay中,我在JSP中使用:

<%@page import="com.liferay.portal.kernel.bean.PortletBeanLocatorUtil" %>
<c:set var="testUtil" value='<%= PortletBeanLocatorUtil.locate("another-web-app-portlet", "com.mycompany.test.Test") %>' />

在JSP中,我可以编写这个JSTL代码,这可行:

${testUtil.test}

但我不能这样做:

<% TestUtil test = PortletBeanLocatorUtil.locate("another-web-app-portlet", "com.mycompany.test.Test"); %>

因为它当然不会编译。此webapp看不到TestUtil(我无法看到它)。

问题是: 如何在BeanLocator上找到的bean上的scriplet中调用方法?

我想做点什么:

<% PortletBeanLocatorUtil.locate("another-web-app-portlet", "com.mycompany.test.Test").myMethod("my param value"); %>

1 个答案:

答案 0 :(得分:2)

如何使用Reflection

import java.lang.reflect.*;
<%
//getMethod expects method name along with the type of arguments - in this example it's expecting single parameter of type String
Method m = PortletBeanLocatorUtil.locate("another-web-app-portlet").getClass().getMethod("myMethod", String.Class ...)

m.invoke(PortletBeanLocatorUtil.locate("another-web-app-portlet"), new Object[] { new String("blah") });
%>