2012-09-27 43 views
1

我正在使用java liferay門戶,其中有多個portlet。我想用一種表單創建一個portlet,當它被提交時,數據被檢索,並且特定的結果顯示在其他頁面portlet中。但不幸的是,這些事情並不妨礙。Inter Portlet通信頁面提交

我正在考慮使用會話,但有2個問題出現。

  1. 將javascript值賦給java變量。
  2. 如果將值傳遞給放置特定portlet的頁面,則該portlet不會獲取值。

然後我聽到Portlet間通信(IPC)的概念,並採取了一些幫助,從「行動中的Liferay」但也有代碼工作如果兩個門戶被放置在同一頁上,和我的要求是一個portlet放在第一頁上,當表單提交時,它被重定向到第二頁,到第二個portlet獲取參數。我嘗試了更多的例子,但沒有按照我的方式工作。

回答

1

我已經找到了另一種方式,相對簡單,只是去嘗試維基從liferay

1

據我所知,你有一些你想傳遞到下一頁的JavaScript參數。但是,您可以使用PortletSession的APPLICATION_SCOPE來完成此任務,並且可以通過將值放入輸入來解決將JS params轉換爲Java的問題。如果不應該這些輸入瓦爾由用戶進行書面和你把他們從別的地方,你可以隱藏輸入:

在你的JSP:

<form> 
<input type="hidden" id="myinput1" name="in1" value=""> 
<input type="hidden" id="myinput1" name="in2" value=""> 
</form> 

<script> 
var a = "avalue"; 
var b = "bvalue"; 
document.getElementById("myinput1").value=a; 
document.getElementById("myinput2").value=b; 
</script> 

然後當你提交表單需要。接下來,你就可以在portlet的processAction方法來這樣做:

String a= request.getParameter("in1"); 
String b= request.getParameter("in2"); 

PortletSession session = request.getPortletSession(); 
session.setAttribute("a", a , PortletSession.APPLICATION_SCOPE); 
session.setAttribute("b", b , PortletSession.APPLICATION_SCOPE); 

在其他portlet中,您可以通過調用

session.getAttribute("a",PortletSession.APPLICATION_SCOPE); 

這當然找到它,如果你不能簡單地把它們放在下一頁的網址中。