Liferay Документация:
Вы можете иметь столько действий, сколько вы хотите в портлет. Внедрите каждый из один в качестве метода, который получает два параметра: ActionRequest
и ActionResponse
. Назовите метод, который вы хотите, но обратите внимание, что имя метода должно совпадать с именем URL, которое указывает на него.
Таким образом, на основе подходящей структуры JSP, действий и скриптов вы можете разместить как можно больше actionURL, в одном портлете. Важным моментом является сопоставление значения атрибута name
, указанного в теге URL с именем метода.
Если вы указываете атрибут name, вам необходимо реализовать отдельные методы действий в классе слушателя.
Узор 1:
См, ваши actionURLs будет выглядеть следующим образом:
<portlet:actionURL var="shutdownRebootURL" name="shutdownReboot">
<portlet:param name="action" value="shutdown-reboot" />
</portlet:actionURL>
<portlet:actionURL var="wakeupURL" name="wakeup">
<portlet:param name="wakeaction" value="wakeup" />
</portlet:actionURL>
Итак, ваши действия slass должен содержать следующие методы:
public void shutdownReboot(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
// Your shutdownReboot logic goes here
}
public void wakeup(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
// Your wakeup logic goes here
}
Однако есть нет жесткой необходимости быстро разместить две формы/actionURL, вы можете достичь своего требования, выполнив один метод действия в слушателе c lass, фильтруется на основе значения параметра. В каждом действии этот параметр будет идентифицировать, какое действие было вызвано.
Pattern 2:
Рассмотрим следующий пример:
HTML:
<form action="<portlet:actionURL />" method="post">
<input type="hidden" name="action" id="action" value="" />
<table>
<tr>
<td>shutdown checkbox</td>
<td>reboot checkbox</td>
<td>wakeup checkbox</td>
</tr>
<tr>
<td>
<!-- show specific button based on checkbox checked -->
<button type="submit" id="shutdownReboot" onclick="startActions('shutdownReboot');">Shutdown/Reboot</button>
<button type="submit" id="wakeup" onclick="startActions('wakeup');">Wakeup</button>
</td>
</tr>
</table>
</form>
Javascript:
function startActions(action) {
document.getElementById('action').value = action;
/* set other required parameters */
}
Метод
Действие:
String action = "";
public void processAction(ActionRequest actionRequest, ActionResponse actionResponse)
throws IOException, PortletException {
if(actionRequest.getParameter("action") != null && actionRequest.getParameter("action") != ""){
action = actionRequest.getParameter(action);
}
if(action.equals("shutdownReboot")){
// shutdown-reboot logic
}else if(action.equals("wakeup")){
// wakeup logic
}else{
// default logic
}
}
Почему, есть ли строгая необходимость разместить две формы?Хотя вы можете добиться этого, используя сингл! –
Предположим, я начал работать над проектом, который реализовал метод, вызванный из одного actionURL ... Самый простой способ - реализовать другой метод, вызванный из другого actionURL, чтобы избежать переопределения первого метода и разделить код бэкэнд-кода на два метода управления , однако я хочу вызвать этот метод с одной страницы jsp в портлете. –
У меня есть идея разделить эту страницу jsp на отдельные jsps, каждая из которых будет иметь actionURL, а затем просто включить один jsp в другой, не уверенный, что он будет работать, но может попробовать его завтра. –