2015-04-02 2 views
2

Я просто хочу знать, если у меня есть два действительных URL-адреса в одном jsp. Которое будет вызываться в зависимости от заполненных входов и JS, представляющих эти формы. Пример:Два URL-адреса действия в одном jsp

JS:

function startActions() { 
    if (document.getElementById("shut").checked || 
     document.getElementById("reboot").checked) {  
     document.getElementById("shutdownRebootForm").submit(); 
    } 
    if (document.getElementById("wake").checked) { 
     document.getElementById("wakeUpForm").submit(); 
    } 
} 

HTML:

<portlet:actionURL var="shutdownReboot"> 
    <portlet:param name="action" value="shutdown-reboot" /> 
</portlet:actionURL> 
<form id="shutdownRebootForm" method="post" action="${shutdownReboot}"> 
    //some HTML code 
</form> 

<portlet:actionURL var="wakeup"> 
    <portlet:param name="wakeaction" value="wakeup" /> 
</portlet:actionURL> 
<form id="wakeUpForm" method="post" action="${wakeup}"> 
    //some HTML code 
</form> 

Я использую Spring MVC ... это можно реализовать? Будет ли он работать, как ожидалось?

+0

Почему, есть ли строгая необходимость разместить две формы?Хотя вы можете добиться этого, используя сингл! –

+0

Предположим, я начал работать над проектом, который реализовал метод, вызванный из одного actionURL ... Самый простой способ - реализовать другой метод, вызванный из другого actionURL, чтобы избежать переопределения первого метода и разделить код бэкэнд-кода на два метода управления , однако я хочу вызвать этот метод с одной страницы jsp в портлете. –

+0

У меня есть идея разделить эту страницу jsp на отдельные jsps, каждая из которых будет иметь actionURL, а затем просто включить один jsp в другой, не уверенный, что он будет работать, но может попробовать его завтра. –

ответ

4

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 
    }  
} 
+0

Приятный и полезный ответ спасибо. –

+0

Мое удовольствие, счастливое кодирование !!! –

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