ошибка liferay не показывает портлет

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

Я читал, что могу использовать CountryLocalService, @Reference и т. д.? Этот код подходит? Я вижу, что мой портлет активен, но он не отображается в виджете Sample. Можете ли вы предоставить код для вызова 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;
        }
    }

person user2974612    schedule 29.08.2018    source источник
comment
В вашем вопросе упоминается CountryLocalServiceUtil, а в вашем коде нет. Пожалуйста, уточните (например, похоже, что ошибка возникает в JSP, а не в этом коде). Кроме того, вы помечаете тегами liferay-6, liferay-7, tomcat — только один из них имеет смысл, я оставлю вам поиск соответствующего тега. И наконец, я озадачен вашей запутанностью, чтобы установить CountryLocalService в методе с именем setFooLocalService, но это только косметический вопрос.   -  person Olaf Kock    schedule 29.08.2018
comment
Я попытался использовать CountryLocalServiceUtil и получил ошибку. Теперь я пытаюсь использовать CountryLocalService. Есть идеи? Также пробовали с renderRequest.setAttribute(countryLocalService, countryLocalService); ‹%@ include file=/init.jsp %› ‹p› ‹% CountryLocalService countryLocalService = (CountryLocalService) renderRequest.getAttribute(CountryLocalService); %>   -  person user2974612    schedule 29.08.2018
comment
пожалуйста, отредактируйте свой вопрос с проблемой, которую вам нужно решить. Я пробую разные вещи, но у меня все еще есть проблемы, слишком расплывчатые, чтобы на них можно было ответить. И реагировать на все мои предыдущие предложения.   -  person Olaf Kock    schedule 29.08.2018
comment
Теперь он отредактирован. Я не знаю, что еще написать. Я думаю, что это ясно.   -  person user2974612    schedule 29.08.2018


Ответы (1)


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

Следующий код, который почти идентичен вашему коду, работает для меня на Liferay DXP 7.0, портлет развертывается, отображается в категории примеров и был создан путем простого запуска шаблона mvc-portlet в 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;
    }
}
person Olaf Kock    schedule 29.08.2018
comment
Я использую портал liferay CE 7.1.0. ГА1. Мне удалось получить Count из страны (249). Похоже, моя проблема связана с подключением к Oracle. Он постоянно подключает меня к БД по умолчанию. Есть много примеров, как связать внешнюю базу данных liferay с оракулом, где они добавили ojdb14.jar, ext-spring.xml и т. д., но после всех этих шагов я получил (CountryLocalServiceUtil.getCountriesCount()) - ОШИБКА [http-bio-8080- exec-10][render_portlet_jsp:132] null), так что какой-то парень сказал мне, что это может быть потому, что getService имеет значение null, и я пытался получить данные без класса Util. Извините за потраченное время! - person user2974612; 29.08.2018
comment
Ну, этот код должен работать и с 7.1, просто я его не проверял. Ваш комментарий звучит так, как будто вы работаете со своим собственным, настраиваемым CountryLocalService? В этом случае отредактируйте другой вопрос, указав больше информации. Не слишком очевидно, что оба вопроса принадлежат друг другу. - person Olaf Kock; 29.08.2018