portlet.getInstanceId () всегда возвращает нуль в JSP ловушки портлета - PullRequest
0 голосов
/ 13 июня 2019

Я использую liferay 6.2.

Я хочу получить идентификатор экземпляра портлета в файле jsp ловушки портлета. Ниже приведен мой код, но идентификатор экземпляра всегда выводите null на консоль:

<% 
List<Portlet> portletList = null;
try{
    portletList =PortletLocalServiceUtil.getPortlets();
}catch(Exception e){}
for(Portlet portlet : portletList){
    String portletName = portlet.getDisplayName();
    if(portletName.equals("Asset Categories Navigation")) {
        System.out.println("Portlet instance Id >>> " + portlet.getInstanceId());
        System.out.println("Portlet Display Name >>> " + portletName); 
        System.out.println("Portlet Id >>> " + portlet.getPortletId());
        System.out.println("Portlet Name >>> " + portlet.getPortletName()); 
        break;
    }
}
%>

Выход:

Portlet instance Id >>> null
Portlet Display Name >>> Asset Categories Navigation
Portlet Id >>> 122
Portlet Name >>> 122

1 Ответ

1 голос
/ 14 июня 2019

Если я правильно понимаю этот API (из его методов), он предоставит вам все портлеты, которые вы можете создать и добавить на страницу, но не фактически созданные экземпляры портлетов.

Чтобы получить созданные портлеты, вы обычно проходите страницу (Layout в API) и проверяете, что там добавлено.

На портале с тысячами страниц, каждая из которых имеет несколько портлетов, не имеет смысла вслепую перечислять все созданных экземпляров портлетов, кроме того, на них не ссылаются через портлет, а только через страницы (потому что к ним обычно обращаются).

Портлет, который не создан на странице, естественно, не имеет идентификатора экземпляра. Вы сможете проверить это, выбрав любой портлет, например «Навигация по категориям активов», и поместите его на несколько страниц. Я предполагаю, что ваш код приведет к тому, что этот портлет будет встречаться ровно один раз.

...