下面是我的 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/