2013-07-03 67 views
0

我正在嘗試編寫一個簡單的計算器portlet,並且將其中一個按鈕的值傳遞給了我的portlet。還有我的.jsp的一部分:Portlet-表單中的多個按鈕

<portlet:actionURL var = "digit" name = "onDigitPressed"> 
<portlet:param name="jspPage" value = "/html/calc/view.jsp"/> 
</portlet:actionURL> 

<aui:form action="<%= digit %>" method="post" > 

<table> 
<tr><td> 
<aui:button name="button" type = "submit" value="7" id="7"/> 
</td><td> 
<aui:button name="button" type = "submit" value="8" id="8" /> </td><td> 
<aui:button name="button" type = "submit" value="9" id="9"/> </td><td> 
</tr><tr><td> 
. 
.//more buttons 
. 
</tr><tr><td> 
<aui:button name="button" type = "submit" value="0" id="0" /> </td><td> 
<aui:button name="button" type = "submit" value="." id="." /> </td><td> 
</td> 
</tr> 
</table> 
</aui:form> 

onDigitPressed方法:

request.getParameter("button");//returns always null 

我想以某種方式通過該按鈕的價值,我想只有一個actionURL處理所有這些按鈕。只有一種形式也是很好的。必須有某種方式,但我不知道如何做到這一點,我是portlet和JSP中的新手。

編輯

我的問題的解釋不是很清楚 - 我想傳遞的值點擊按鈕。我需要這些信息來了解用戶想要計算的內容。當然我可以只用actionURL s和form s發送垃圾郵件,但我想用一種形式和actionURL來做到這一點。我敢打賭,它與onClick屬性有關,我很確定我不能使用JavaScript,因爲它必須在服務器端完成,並且在客戶端執行javascript。

回答

0

你需要做的,是包括輸入字段或portlet:param節點即會具有「數字」特定值

你的問題是'submit'類型的aui:button是用來作爲提交表單的按鈕,所以你所有的按鈕都會觸發相同的actionURL。在aui:form

屬性命名爲「行動」說一個我可以看到至少3個解決方案:

  1. 使用另一種形式爲每個按鈕。這將允許您爲每個按鈕設置不同的actionURL,並帶有唯一的「數字」參數。如果你的表單沒有使用其他參數/​​輸入,並且你的表單是通過一些循環創建的,如循環
  2. 使用一個表單和一個提交按鈕,並且包含另一個UI組件這將提供'數字'值
  3. 有一個隱藏的輸入將保持'數字'值的文本。然後讓每個按鈕觸發一個javascript函數,它將更新'數字值'
+0

第二個解決了這個問題,但看起來很奇怪。第3號 - 可能使用類似Nisha的建議,但不在客戶端執行JavaScript?我必須以某種方式將它傳遞給我的portlet。或者用javascript做所有事情,但我想了解一些關於portlet的知識(傳遞參數等)。第一個看起來是最好的選擇,但我想要像表4x3中的普通計算器那樣具有數字按鈕。不幸的是,你不能在表格中放置表格,但是你可以做相反的事情 - 你可以在表格中放置表格。這就是爲什麼我找不到我的問題的好辦法。 – Jankiel

+0

也許有辦法在一行中有多個表單。我對HTML不太瞭解。 – Jankiel

+0

我沒有使用解決方案3,所以我不能提供一些代碼。但其含義是a)javascript更新隱藏的輸入字段,它包含在表單中b)控制器類上的portlet操作將能夠通過id或name來查找此值。 – yannicuLar

3

你可以用java腳本來做到這一點。

Javascript代碼:

var button1 = document.getElementById("button1").value; 
var button2 = document.getElementById("button2").value; 
document.formName.button1 .value = button1 ; 
document.formName.button2.value = button2; 
document.formName.submit(); 

在JSP:

<aui:button type = "submit" value="1" id="button1"/> 
<aui:button type = "submit" value="2" id="button2"/> 
<input type="hidden" name="button_1" /> 
<input type="hidden" name="button_2" /> 

在Java:

String button_1= ParamUtil.getString(request, "button_1"); 
String button_2= ParamUtil.getString(request, "button_2"); 
+0

您可以使用Liferay resourceURL來執行此操作。這使用ajax調用來發送數據。通過這個,您可以通過點擊每次發送數據到操作方法。爲此,您必須在您的操作類中使用servResource()方法。 – Pranoti