2013-07-03 3 views
0

Я пытаюсь написать простой портлет калькулятора, и у меня проблема с передачей значения одной из кнопок в портлет. Там часть моего .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 иметь дело со всеми этими кнопками. И было бы хорошо иметь только одну форму. Должен быть какой-то способ, но я понятия не имею, как это сделать, я новичок в портлетах и ​​JSP.

EDIT

Мое объяснение проблемы не очень понятно - я хочу передать значение нажал кнопку. Мне нужна эта информация, чтобы знать, что пользователь хочет вычислить. Конечно, я могу просто спамить с actionURL и form, но я хочу сделать это с помощью одной формы и actionURL. Уверен, что это имеет какое-то отношение к атрибуту onClick, и я уверен, что не могу использовать javascript, потому что это нужно делать на стороне сервера, а javascript выполняется на стороне клиента.

ответ

0

Что вам нужно сделать, это включить поле ввода или portlet:param узел, который будет имеют значение «цифра»

Ваша проблема заключается в том, что aui:button типа 'submit' предназначен для использования в качестве кнопки, которая представляет форму, поэтому все ваши кнопки будут запускать одно и то же действиеURL. один указано в атрибуте с именем «действия» из aui:form

я могу видеть, по крайней мере, 3 решения:

  1. использовать другую форму для каждой кнопки. Это позволит вам установить другую actionURL для каждой кнопки с уникальным параметром «цифра». Это было бы неплохой идеей, если ваша форма не содержит других параметров/входов, и если ваши формы создаются с помощью некоторой итерации, например, для цикла
  2. используйте одну форму и одну кнопку отправки, а также добавьте другой компонент ui, например, drop вниз, что даст значение «цифра»
  3. Имейте скрытый ввод текста, который сохранит значение «цифра». Затем каждая из ваших кнопок запускает функцию javascript, которая обновит «цифровую цифру»
+0

Второй разрешает проблему, но выглядит странно. № 3 - возможно, используя что-то вроде предложенного Ниша, но не выполняет javascript на стороне клиента? Мне нужно как-то передать его портлету.Или делайте все в javascript, но я хотел узнать что-то о портлетах (прохождение параметров и т. Д.). Первый выглядит как лучший вариант, но я хочу иметь цифровые кнопки, как в обычном калькуляторе, в таблице 4x3. К сожалению, вы не можете иметь форму внутри таблицы, но вы можете сделать наоборот - вы можете разместить таблицу содержимого в форме. Вот почему я не могу найти хорошее решение моей проблемы. – Jankiel

+0

Возможно, есть способ иметь несколько форм в одной строке. Я мало что знаю о html. – Jankiel

+0

Я не использовал решение 3, поэтому я не могу предоставить какой-то код. Но смысл: a) javascript обновляет скрытое поле ввода, которое содержится в форме b) Действие портлета в классе контроллера сможет найти это значение по id или имени. – 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

Смежные вопросы