2012-03-21 45 views
2

我已经建立了友好的URL路由我Liferay的门户,它的工作很好,当我生成标准的JSP标签,像这样的网址:如何获取Liferay的Javascript PortletURL模块以使用友好的URL映射?

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

其中,由于我的映射,产生一个可爱的网址,如:

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

但是,当我生成使用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 

所以我的问题是: 怎样才能从JavaScript友好的网址?

回答

1

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

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和替换这样的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); 
} 

,你有你友好的URL。

+0

哈!尼斯黑客。 – rhodri 2012-04-11 11:09:07

+0

谢谢亲爱的... :) – 2012-04-11 17:45:05