ошибка liferay не показывает портлет - PullRequest
0 голосов
/ 29 августа 2018
  1. Создано рабочее пространство
  2. Создан построитель сервисов и добавлен объект
  3. Создан DemoPortlet
  4. Я пытаюсь получить данные из БД и system.out в методе doView в DemoPortlet.
  5. Когда я использую CountryLocalServiceUtil (CountryLocalServiceUtil.getCountriesCount ()) - ОШИБКА [http-bio-8080-exec-10] [render_portlet_jsp: 132] null

Я читал, что могу использовать CountryLocalService, @Reference и т. Д.? Этот код в порядке? Я вижу, что мой портлет активен, но он не отображается в образце виджета. Можете ли вы предоставить код, который можно вызвать методом getCountriesCount () с помощью CountryLocalService?

  @Component(
        immediate = true,
        property = {
            "com.liferay.portlet.display-category=category.sample",
            "com.liferay.portlet.instanceable=true",
            "javax.portlet.init-param.template-path=/",
            "javax.portlet.init-param.view-template=/view.jsp",
            "javax.portlet.name=" + DemoPortletKeys.Demo,
            "javax.portlet.resource-bundle=content.Language",
            "javax.portlet.security-role-ref=power-user,user"
        },
        service = Portlet.class
    )
    public class DemoPortlet extends MVCPortlet {

        private CountryLocalService countryLocalService;


        @Override
        public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
                throws IOException, PortletException {
            // TODO Auto-generated method stub

            System.out.println("********" + getCountryLocalService().getCountriesCount() + " ********************");

            super.doView(renderRequest, renderResponse);
        }

        public CountryLocalService getCountryLocalService() {
            return countryLocalService;
            }

        @Reference(unbind = "-")
        public void setCountryLocalService(CountryLocalService countryLocalService) {
        this.countryLocalService = countryLocalService;
        }
    }

1 Ответ

0 голосов
/ 29 августа 2018

Вы не указываете, какую именно версию Liferay вы используете, просто очевидно, что это 7.0 или 7.1. В текущей кодовой базе я не вижу CountryLocalService, но есть com.liferay.portal.kernel.service.CountryService.

Следующий код, который почти идентичен вашему коду, работает для меня на Liferay DXP 7.0, портлет развертывается, отображается в категории примеров и был создан только путем запуска из шаблона mvc-портлета в Liferay Developer Studio. Единственный файл, который я отредактировал, показан здесь.

package com.example.country.portlet.portlet;

import com.example.country.portlet.constants.CountryPortletKeys;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCPortlet;
import com.liferay.portal.kernel.service.CountryService;

import java.io.IOException;

import javax.portlet.Portlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;

import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;

@Component(
    immediate = true,
    property = {
        "com.liferay.portlet.display-category=category.sample",
        "com.liferay.portlet.instanceable=true",
        "javax.portlet.display-name=countryportlet Portlet",
        "javax.portlet.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.jsp",
        "javax.portlet.name=" + CountryPortletKeys.Country,
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)
public class CountryPortlet extends MVCPortlet {
    private CountryService countryService;

    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse)
            throws IOException, PortletException {
        System.out.println("************* " + countryService.getCountries().size() + " ***************");
        super.doView(renderRequest, renderResponse);
    }

    @Reference
    public void setCountryService(CountryService cs) {
        this.countryService = cs;
    }
}
...