Portlet - 表单中的多个按钮

时间:2013-07-03 10:41:39

标签: jsp liferay portlet

我正在尝试编写一个简单的计算器portlet,我将其中一个按钮的值传递给我的portlet时遇到了问题。这是我的.jsp的一部分:

<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的新手。

修改

我对问题的解释不是很清楚 - 我想传递点击按钮的值。我需要这些信息才能知道用户想要计算什么。当然,我可以使用actionURLform来发送垃圾邮件,但我希望使用一个表单和actionURL执行此操作。我敢打赌它与onClick属性有关,我很确定我不能使用javascript,因为它必须在服务器端完成,javascript在客户端执行。

2 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

您需要做的是,包含一个输入字段或具有“数字”特定值的portlet:param节点

您的问题是aui:button类型为'submit',用作提交表单的按钮,因此所有按钮都会触发相同的actionURL。在aui:form

的名为“action”的属性中声明的那个

我可以看到至少3个解决方案:

  1. 为每个按钮使用另一种形式。这将允许您为每个按钮设置不同的actionURL,并使用唯一的“数字”参数。如果你的表单不包含其他参数/​​输入,并且你的表单是通过像for循环这样的迭代创建的,那么这将是一个不错的主意
  2. 使用一个表单和一个提交按钮,并包含另一个ui组件,如下拉菜单,将提供“数字”值
  3. 有一个隐藏的输入文本,它将保留'digit'值。然后让你的每个按钮激活一个javascript函数,它将更新'数字值'