我正在使用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"); %>
答案 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") });
%>