如何让Liferay的Javascript PortletURL模块使用友好的URL映射?

时间:2012-03-21 14:51:31

标签: javascript liferay portlet liferay-6

我为Liferay portlet设置了友好的URL路由,当我使用标准JSP标记生成URL时,它正常工作:

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

,根据我的映射,产生一个可爱的URL,如:

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

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

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生成友好的网址?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你可以尝试的一件事是这种方法,有点棘手 -

                <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并替换像这样的参数值 -

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);
}

你有友好的网址。