2013-12-16 32 views
0

我是Liferay的新手。我想要做的是將值傳遞給javascript函數,然後通過傳遞給該函數的值從該函數調用另一個jsp頁面。 。頁面無法通過createRenderUrl轉發

這是我試過的。

<script type="text/javascript"> 
function sendId(userid) { 
    AUI().ready("liferay-portlet-url", function(A) { 
     var portletURL = Liferay.PortletURL.createRenderURL(); 

     alert("in function"+userid); 

     portletURL.setParameter("jspPage", "/html/assignsites/assignSites.jsp"); 
     portletURL.setParameter("id", userid); 
     portletURL.setPortletId("assignsites_WAR_AssignSitesportlet"); 

    }); } 
</script> 

for (User usersList: users) { 

%> 
    <tr> 
     <td><a href="#" onclick="sendId('<%=usersList.getUserId()%>');"><%=usersList.getFullName()%></a></td> 
     <td><%=usersList.getEmailAddress()%></td> 
    </tr> 
<% 
} 
%> 

我想檢索assignSites.jsp上的userId,所以我在portletURL中設置該值。 但是,當我點擊鏈接警報獲得出現,什麼都沒有發生..am我做對了..?

請有人指導我。

+0

在js代碼中沒有任何東西可以發生。 –

+0

Iam設置我想要在portletUrl中轉發的url ..我認爲這樣做會轉發到所需的頁面..您可以更正我需要執行的代碼嗎? – xyz

+0

我也試圖通過增加portletId並且使AUI()修改JavaScript代碼。使用()來AUI.action()仍然沒有任何反應 – xyz

回答

1

有兩個問題與您提供的代碼:

  • AUI命名空間意味着是頂層,一個功能的實現不是部分。
  • 儘管如此,你並沒有對構造的portletURL變量做任何事情。

潘卡Kathiriya的評論已經給出了一個方法來生成,而不在所有涉及任何JavaScript的網址,這裏是它的一個漂亮的印刷(和略有變化)版本:(警告:僞代碼,寫在這裏,從來沒有測試)

for (User usersList: users) { 
%> 
    <portlet:renderURL var="assignSiteURL"> 
     <portlet:param name="id" value="<%=usersList.getUserId()%>"/> 
     <portlet:param name="jspPage" value="/html/assignsites/assignSites.jsp"/> 
    </portletRenderURL> 
    <tr> 
     <td><a href="<%=assignSiteURL%>"><%=usersList.getFullName()%></a></td> 
     <td><%=usersList.getEmailAddress()%></td> 
    </tr> 
<% 
} 
%> 

記住,AUI命名空間是爲了從其他portlet的代碼分離你的JS代碼:你提出的代碼最終會得到一個名爲sendId(x)的全局函數 - 在同一個頁面上的任何其他門戶可能引入另一個同名的方法。這會導致難以解決的衝突,因此您不應該這樣做。

當然,這種隔離的缺點是不能在「onclick」處理程序中輕鬆調用這些方法。但是,您可以枚舉想要更改並動態更新它們的所有節點。

如果你堅持使用javascript解決方案,我會爲你(或其他人)留下這一點,部分原因是我不希望在這種情況下它是必需的。