Как вызвать метод для объекта, найденного с помощью BeanLocator - PullRequest
1 голос
/ 23 февраля 2012

Я использую 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"); %>

Потому что, конечно, он не скомпилируется.TestUtil не виден этому веб-приложению (и я не могу сделать его видимым).

Вопрос заключается в следующем: как я могу вызвать метод в scriplet на моем компоненте, найденном с помощью BeanLocator?

Я хотел бы сделать что-то вроде:

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

1 Ответ

2 голосов
/ 23 февраля 2012

Как насчет использования 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") });
%>
...