2013-07-03 38 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