一个jsp中有两个动作URL

时间:2015-04-02 13:15:17

标签: java javascript html jsp liferay

我只想知道,如果我在一个jsp中可以有两个<portlet:actionURL var="wakeup">个动作网址。将根据填充的输入和JS提交此表单来调用。例如:

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 ......这有可能实现吗?它会按预期工作吗?

1 个答案:

答案 0 :(得分:4)

Liferay文档:

  

您可以在portlet中拥有任意数量的操作。实施每个   一个作为接收两个参数的方法:ActionRequest和   ActionResponse。根据需要为方法命名,但请注意   方法名称必须与指向它的URL名称匹配。

因此,基于合适的JSP,操作和脚本结构,您可以在单个portlet中放置所需数量的actionURL。重要的一点是将URL标记上指定的name属性值与方法名称相匹配。

如果要指定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
}

但是,没有硬性快速需要放置两个表单/ actionURL,您可以通过在侦听器类中实现一个action方法来实现您的需求,并根据参数的值进行过滤。 在每个操作上,该参数将标识已调用的操作。

模式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
    }       
}