我为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生成友好的网址?
答案 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);
}
你有友好的网址。