如何获得Liferay'的Javascript PortletURL模块,以使用友好的URL映射

How do I get Liferay's Javascript PortletURL module to work with friendly URL mappings?

本文关键字:映射 URL PortletURL Liferay 何获得 Javascript 模块      更新时间:2023-09-26

我已经为我的Liferayportlet设置了友好的URL路由,当我使用标准JSP标记生成URL时,它运行良好,比如:

<portlet:renderURL var="resetUrl">
    <portlet:param name="start" value="5" />
</portlet:renderURL>

根据我的映射,它生成了一个可爱的URL,比如:

localhost:8080/web/guest/welcome/-/myportlet/5

但是,当我使用JavaScriptPortletURL模块生成URL时,我会得到完全不友好的URL。例如:

var filterUrl = Liferay.PortletURL.createRenderURL();
filterUrl.setPortletId("<%= portletDisplay.getId() %>");
filterUrl.setParameter("start", "5");
location.href = filterUrl;

将生成

localhost:8080/web/guest/welcome?p_p_id=myportlet_WAR_MyPortletportlet&p_p_lifecycle=0&myportlet_WAR_MyPortletportlet_start=5

所以我的问题是:如何从JavaScript生成友好的URL

没有简单的方法可以做到这一点。您必须重写portal_url.js和PortletURLAction.java。另一种选择是编写自己的portlet,它可以根据需要生成URL并通过AJAX访问它。

你可以尝试这种方法,有点棘手-

                <portlet:actionURL var="copyNavigationPointURL">
                    <portlet:param name="myaction" value="copy-navigation-point"></portlet:param>
                    <portlet:param name="objectTypeId" value="changeObjType"></portlet:param>
                    <portlet:param name="navigationPointId" value="changeNavPointId"></portlet:param>
                </portlet:actionURL>

然后编写javascript并替换这样的param值-

function copyNavigationPoint(copyNavigationPointURL) {
    var copyNavId = document.getElementById("navigationPointId").value;
    if (copyNavId==null || copyNavId=='null'){
        alert('error');
        return;
    }
    var objectTypeId = document.getElementById("objectTypeId").value;
    copyNavigationPointURL = copyNavigationPointURL.replace(/changeObjType/i,objectTypeId);
    copyNavigationPointURL = copyNavigationPointURL.replace(/changeNavPointId/i,copyNavigationPointId);
    submitForm(document.hrefFm, copyNavigationPointURL);
}

你有你的友好网址。