Как заставить модуль Liferay Javascript PortletURL работать с дружественными отображениями URL? - PullRequest
2 голосов
/ 21 марта 2012

Я настроил дружественную маршрутизацию URL для своего портлета Liferay, и он отлично работает, когда я генерирую URL со стандартными тегами JSP, например:

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

, что, учитывая мое отображение, дает прекрасныйURL вроде:

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

Но когда я генерирую URL с помощью модуля JavaScript PortletURL , я получаю полный недружественный 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

Итак, мой вопрос: Как я могу создать дружественные URL-адреса из JavaScript?

Ответы [ 2 ]

1 голос
/ 10 апреля 2012

Одна вещь, которую вы можете попробовать, это немного хитрый подход -

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

И у вас есть ваш дружественный URL.

1 голос
/ 24 марта 2012

Нет простого способа сделать это.Вам придется переписать portal_url.js и PortletURLAction.java.Другой вариант - написать свой собственный портлет, который может сгенерировать URL-адрес так, как вам нужно, и получить к нему доступ через AJAX.

...