在门户网站上发出ajax请求时,您的portlet应该实现
javax.portlet.ResourceServingPortlet
GenericPortlet已经存在,但是您想覆盖它,而不是使用它,而
<portlet:actionURL/>应该
<portlet:resourceURL />从操作中使用fro。
并且在您的设置中,您应该具有带有关键字隐藏字段的搜索表单,并且在搜索portlet中单击“提交”按钮时,您应该使用IPC复制该表单中的关键字,以搜索结果portlet并从中调用对搜索结果的提交(不提交表单)。搜索portlet(A))。
您的SearchResultPortlet类应为
public class SearchResultPortlet extends GenericPortlet { ... public void serveResource(ResourceRequest request, ResourceResponse response) throws PortletException, java.io.IOException { // do search and return result } ...}编辑:完整的例子
搜索表格
import java.io.IOException;import javax.portlet.GenericPortlet;import javax.portlet.PortletException;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;public class SearchForm extends GenericPortlet { @Override protected void doView(RenderRequest p_request, RenderResponse p_response) throws PortletException, IOException { getPortletContext().getRequestDispatcher("/WEB-INF/jsp/search.jsp").include(p_request, p_response); }}搜索结果
import java.io.IOException;import javax.portlet.GenericPortlet;import javax.portlet.PortletException;import javax.portlet.RenderRequest;import javax.portlet.RenderResponse;import javax.portlet.ResourceRequest;import javax.portlet.ResourceResponse;public class SearchResult extends GenericPortlet { @Override protected void doView(RenderRequest p_request, RenderResponse p_response) throws PortletException, IOException { getPortletContext().getRequestDispatcher("/WEB-INF/jsp/result.jsp").include(p_request, p_response); } @Override public void serveResource(ResourceRequest p_request, ResourceResponse p_response) throws PortletException, IOException { //do your search here and put results in 'result' p_request.setAttribute("result", "results for: " + p_request.getParameter("search")); getPortletContext().getRequestDispatcher("/WEB-INF/jsp/html.jsp").include(p_request, p_response); }}search.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %><portlet:defineObjects /><script type="text/javascript"> function doSearch() { Liferay.fire('searchKeywords', document.getElementById("<portlet:namespace/>search").value); }</script><form> <input type="text" name="search" id="<portlet:namespace/>search" /> <button name="Search" value="Search" onclick="doSearch()" type="button">Search</button></form>result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/portlet" prefix="portlet" %><%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %><portlet:defineObjects /><portlet:resourceURL var="rurl" /><script type="text/javascript"> Liferay.on('searchKeywords', function(event, p_data){ var A = AUI(); A.use('aui-io-request', function(aui) { A.io.request("<%= rurl %>", { method : 'POST', data: {search: p_data}, dataType : 'html', on : { success : function() { AUI().one("#<portlet:namespace/>placeholder").html(this.get('responseData')); } } }); }); });</script>Search Results:<br /><div id="<portlet:namespace/>placeholder"></div>html.jsp(用于呈现结果)
<%= request.getAttribute("result") %>


