В настоящее время я пытаюсь использовать 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"
}