java - liferay - 无法调用Portlet类的processAction

标签 java jsp liferay-6 portlet

下面是我的 View.jsp 代码

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %>

<portlet:defineObjects />

<portlet:actionURL name="myAction" var="myAction"> 
</portlet:actionURL>
    <form action="${myAction}" method="POST">
        Name : <input type="text" name="name">
        <input type="button" value="SUBMIT">
    </form>

下面是我的 Portlet 类代码

package com.generic;

    import java.io.IOException;

    import javax.portlet.ActionRequest;
    import javax.portlet.ActionResponse;
    import javax.portlet.GenericPortlet;
    import javax.portlet.PortletException;
    import javax.portlet.PortletRequestDispatcher;
    import javax.portlet.RenderRequest;
    import javax.portlet.RenderResponse;

    import com.liferay.portal.kernel.log.Log;
    import com.liferay.portal.kernel.log.LogFactoryUtil;

    /**
     * Portlet implementation class FirstGenericDemo
     */
    public class FirstGenericDemo extends GenericPortlet {

        public void init() {
            viewTemplate = getInitParameter("view-template");
        }

        public void doView(RenderRequest renderRequest, RenderResponse renderResponse)throws IOException, PortletException {
            System.out.println("view");
            include(viewTemplate, renderRequest, renderResponse);
        }
        protected void include(String path, RenderRequest renderRequest,RenderResponse renderResponse)throws IOException, PortletException {
            PortletRequestDispatcher portletRequestDispatcher =
                getPortletContext().getRequestDispatcher(path);

            if (portletRequestDispatcher == null) {
                _log.error(path + " is not a valid include");
            }
            else {
                portletRequestDispatcher.include(renderRequest, renderResponse);
            }
        }

        protected String viewTemplate;

        private static Log _log = LogFactoryUtil.getLog(FirstGenericDemo.class);

        @Override
        public void processAction(ActionRequest request, ActionResponse response)
                throws PortletException, IOException {
            System.out.println("ok");
            String name=request.getParameter("name");
            System.out.println("name is : "+name);
            super.processAction(request, response);
        }

    }

当呈现 portlet 时, View 方法被调用,但是当我单击提交按钮时,processAction 方法和 View 方法都没有被调用。这些在堆栈跟踪中也没有错误。我确实通过部署多次尝试过,但问题是相同的。任何人都可以帮忙解决这个问题吗? ?

最佳答案

该代码有几个问题。

当您使用 GenericPortlet 作为父级时,Ajay 建议的重命名将不起作用。

要正确地将 jsp/html 代码与 portlet 类绑定(bind),您需要重命名该类按照 Ajay 的建议对其进行注释。

@ProcessAction(name=myAction)
public void myAction(ActionRequest request, ActionResponse response)
            throws PortletException, IOException {
    //your code
}

另一个选择是使用 MVCPortlet 作为基类。然后重命名就足够了(name属性需要匹配方法名称)。

第二个不起作用的是参数。如果您不使用 aui 标签,则需要将命名空间添加到输入名称中。在 JAVA 代码中,您仅通过名称引用参数(没有命名空间)

Name : <input type="text" name="<portlet:namespace/>name">

我建议使用 AUI 标签。更容易。

关于java - liferay - 无法调用Portlet类的processAction,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47094197/

相关文章:

java - net::ERR_CONTENT_LENGTH_MISMATCH - 加载 javascript 失败

java - 如何同步共享变量使这个程序安全?

ajax - Liferay中使用ajax从数据库中提取数据

java - 将主题部署到 liferay 门户时发生错误。 "No theme found for specified theme id ."

java - 关于java编程中的有理数,计算(1/2+3/4+...+99/100)^2

java - 表达式语言,不显示变量值

css - 我正在使用 tiles 但 baselayout 的 css 文件不会应用于所有页面

java - Struts2参数到javascript

javascript - Liferay:从 portlet 调用 JSON 服务

java - 为什么Java中Integer对象的计数速度比int慢