我只想知道,如果我可以<portlet:actionURL var="wakeup">在一个jsp中包含两个动作URL。将根据填充的输入和JS提交此表单的方式调用该方法。例:
<portlet:actionURL var="wakeup">
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 …这可能实现吗?它会按预期工作吗?
Liferay文档:
您可以在portlet中进行任意数量的操作。将每个方法实现为接收两个参数的方法:an ActionRequest和an ActionResponse。可以根据需要命名该方法,但请注意,该方法名称必须与指向该方法的URL名称匹配。
ActionRequest
ActionResponse
因此,基于合适的JSP,操作和脚本结构,您可以在单个portlet中放置任意数量的actionURL。重要的是将nameURL标记上指定的属性的值与方法的名称匹配。
name
如果要指定名称属性,则需要在侦听器类中实现单独的操作方法。
模式1:
瞧,您的actionURL如下所示:
<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>
因此,您的行动策略应包含以下方法:
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 }
但是,并不需要紧迫地放置两个form / actionURLs,您可以通过在侦听器类中实现一个基于方法值进行过滤的action方法来实现您的要求。在每个动作上,该参数将标识已调用了哪个动作。
模式2:
考虑以下示例:
<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 } }