java - 一个 jsp 中的两个操作 URL

标签 java javascript html jsp liferay

我只是想知道,我是否可以有两个 <portlet:actionURL var="wakeup">一个 jsp 中的操作 url。这将根据填写的输入和提交此表单的 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...这可以实现吗?它会按预期工作吗?

最佳答案

Liferay 文档:

You can have as many actions as you want in a portlet. Implement each one as a method that receives two parameters: an ActionRequest and an ActionResponse. Name the method whatever you want, but note that the method name must match the URL name that points to it.

因此,基于合适的 JSP、操作和脚本结构,您可以在单个 portlet 中放置任意数量的 actionURL。重要的一点是将 URL 标记上指定的 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,您可以通过在监听器类中实现一个操作方法来实现您的要求,并根据参数的值进行过滤。 对于每个操作,该参数将标识调用了哪个操作。

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

关于java - 一个 jsp 中的两个操作 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29413937/

相关文章:

java - 反转ArrayList : Why must i equal half the size of the list?

java - getConstructor() 在被 Class 类型变量调用时返回 NoSuchMethodException

html - 在 Firefox 中使用 CSS3 table-row/header/footer-group 时如何消除元素之间的间隙?

html - 左右交替组中的 float 图像和文本在 div 的未知高度中垂直居中对齐

JavaScript 在用户缓存中选择

javascript - 如何获取表格的特定div?

java - XMLunit 仅比较标签

java - 对象在绘制时不会出现在 java applet 中。我应该如何正确使用 AWT 中的绘制/重绘方法?

javascript - 重定向后重新加载页面

javascript - 嵌入 javascript 片段 : tag injection vs a complete tag