How do I get Liferay's Javascript PortletURL module to work with friendly URL mappings?
我已经为我的 Liferay portlet 设置了友好的 URL 路由,当我生成带有标准 JSP 标记的 URL 时,它工作正常,如下所示:
1 2 3 | <portlet:renderURL var="resetUrl"> <portlet:param name="start" value="5" /> </portlet:renderURL> |
根据我的映射,它会生成一个可爱的 URL,例如:
1 | localhost:8080/web/guest/welcome/-/myportlet/5 |
但是当我使用 JavaScript PortletURL 模块生成 URL 时,我得到了完整的不友好 URL。例如:
1 2 3 4 | var filterUrl = Liferay.PortletURL.createRenderURL(); filterUrl.setPortletId("<%= portletDisplay.getId() %>"); filterUrl.setParameter("start","5"); location.href = filterUrl; |
会生成
1 | localhost:8080/web/guest/welcome?p_p_id=myportlet_WAR_MyPortletportlet&p_p_lifecycle=0&myportlet_WAR_MyPortletportlet_start=5 |
所以我的问题是:
如何从 JavaScript 生成友好的 URL?
你可以试试这个方法,有点棘手 -
1 2 3 4 5 | <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 并像这样替换参数值 -
1 2 3 4 5 6 7 8 9 10 11 12 | 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); } |
你有你的友好网址。
没有简单的方法可以做到这一点。您将不得不重写portal_url.js 和PortletURLAction.java。
另一种选择是编写自己的 portlet,可以根据需要生成 URL 并通过 AJAX 访问它。