Liferay использует Freemarker вместо JSP внутри портлета - PullRequest
0 голосов
/ 05 августа 2020

В настоящее время я пытаюсь использовать Freemarker вместо JSP для своего портлета, но не знаю, как это сделать. Я попытался настроить свой проект, но я не уверен, что мне не хватает, если моя настройка даже удаленно верна. Как мне поддерживать freemarker в моем проекте vue?

При развертывании модуля я получаю следующие ошибки:

 Unresolved requirement: Import-Package: com.liferay.util.bridges.freemarker; version="[7.0.0,8.0.0)"_ [Sanitized]

Использование MVCPortlet вместо FreeMarkerPortlet устраняет вышеуказанную проблему, но затем я get:

Path /view.ftl is not accessible by portlet vue 

Теперь я попробовал /template/view.ftl, но это тоже не работает. Честно говоря, я сейчас немного потерялся и был бы признателен за понимание того, как это работает.

Вот где мои файлы .ftl:

resource
  -- content
  -- META-INF.resources
  -- templates
     -- init.ftl
     -- vue.ftl

Init.ftl

<#assign aui = PortletJspTagLibs["/META-INF/liferay-aui.tld"] />
<#assign liferay_portlet = PortletJspTagLibs["/META-INF/liferay-portlet-ext.tld"] />
<#assign liferay_security = PortletJspTagLibs["/META-INF/liferay-security.tld"] />
<#assign liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] />
<#assign liferay_ui = PortletJspTagLibs["/META-INF/liferay-ui.tld"] />
<#assign liferay_util = PortletJspTagLibs["/META-INF/liferay-util.tld"] />
<#assign portlet = PortletJspTagLibs["/META-INF/liferay-portlet.tld"] />

<@liferay_theme["defineObjects"] />

<@portlet["defineObjects"] />

view.ftl

<#include "init.ftl">

<@liferay_ui["message"] key="free.caption" />

<script src="${renderRequest.getAttribute("main")}"></script>

My java класс портлета

package vue.portlet;

import com.liferay.util.bridges.freemarker.FreeMarkerPortlet;
import vue.constants.VuePortletKeys;

import com.liferay.frontend.js.loader.modules.extender.npm.NPMResolver;

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.init-param.template-path=/",
        "javax.portlet.init-param.view-template=/view.ftl",
        "javax.portlet.name=" + VuePortletKeys.Vue,
        "javax.portlet.resource-bundle=content.Language",
        "javax.portlet.security-role-ref=power-user,user"
    },
    service = Portlet.class
)

public class VuePortlet extends FreeMarkerPortlet {
    @Override
    public void doView(RenderRequest renderRequest, RenderResponse renderResponse) throws IOException, PortletException {

        renderRequest.setAttribute("main", _npmResolver.resolveModuleName("vue") + " as main");

        super.doView(renderRequest, renderResponse);
    }

    @Reference
    private NPMResolver _npmResolver;
}

Мой build.gradle

dependencies {
    compileOnly group: "com.liferay", name: "com.liferay.frontend.js.loader.modules.extender.api"
    compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib"
    compileOnly group: "com.liferay", name: "com.liferay.frontend.taglib.util.freemarker.contributor"
    compileOnly group: "com.liferay.portal", name: "com.liferay.portal.kernel"
    compileOnly group: "com.liferay.portal", name: "com.liferay.util.bridges"
    compileOnly group: "com.liferay.portal", name: "com.liferay.util.taglib"
    compileOnly group: "javax.portlet", name: "portlet-api"
    compileOnly group: "javax.servlet", name: "javax.servlet-api"
    compileOnly group: "org.osgi", name: "osgi.cmpn"
    compileOnly group: "org.osgi", name: "org.osgi.service.component.annotations"

    cssBuilder group: "com.liferay", name: "com.liferay.css.builder", version: "3.0.2"
}

1 Ответ

0 голосов
/ 05 августа 2020

Чтобы исправить это, при сборке плагина версия зависимости "com.liferay.portal.kernel" должна быть повышена до фактической версии пакета Liferay, с которым вы хотите работать.

...