Tôi là người mới trong cổng thông tin cuộc sống. Tôi đã phát triển một portlet trong liferay cho demo. Tôi đã sử dụng giao tiếp giữa các portlet trong ví dụ này. Những gì tôi đang làm là: - Tôi có một portlet tìm kiếm, trong đó tôi đang có một trường văn bản để tìm kiếm. Khi tôi nhấp vào nút tìm kiếm, nó sẽ lấy dữ liệu từ cơ sở dữ liệu và hiển thị dữ liệu đó bằng cách sử dụng tìm kiếm trong một portlet khác. Tôi đã sử dụng chú thích ProcessEvent và ActionEvent cho dự án này.Làm cách nào để gửi biểu mẫu bằng cách sử dụng yêu cầu Ajax trong Liferay?
Bây giờ những gì tôi muốn là khi tôi nhấp vào nút tìm kiếm thì trang sẽ không được làm mới (tức là tôi muốn sử dụng khái niệm AJAX) và dữ liệu sẽ được hiển thị trên portlet kia.
Code Snippet
Portlet A - view.jsp
<%@include file="/html/init.jsp"%>
<portlet:defineObjects />
<!--
<portlet:actionURL var="actionURL" name="pitchBall"></portlet:actionURL>
//-->
**Change to Resource URL**
<portlet:resourceURL var="resourceURL">
</portlet:resourceURL>
<aui:form method="POST" action="<%= resourceURL%>" name=" <portlet:namespace>fm1</portlet:namespace>">
<aui:input name="search" id="search" />
<aui:button type="submit" name="Search" value="Search" />
</aui:form>
Portlet A - SearchPortlet Lớp
package com.test;
/**
* Portlet implementation class SearchPortlet
*/
public class SearchPortlet extends GenericPortlet {
@Override
public void render(RenderRequest request, RenderResponse response)
throws PortletException, IOException {
// TODO Auto-generated method stub
super.render(request, response);
}
@ProcessAction(name="pitchBall")
public void pitchBall(ActionRequest request, ActionResponse response) throws SystemException {
String name = ParamUtil.getString(request, "search");
QName qName = new QName("http://liferay.com/events", "ipc.pitch");
response.setEvent(qName, name);
}
public void init() {
editJSP = getInitParameter("edit-jsp");
helpJSP = getInitParameter("help-jsp");
viewJSP = getInitParameter("view-jsp");
}
public void doEdit(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(editJSP, renderRequest, renderResponse);
}
public void doHelp(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(helpJSP, renderRequest, renderResponse);
}
@Override
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
//super.doView(renderRequest, renderResponse);
System.out.println("In doView code");
renderResponse.setContentType(renderRequest.getResponseContentType());
// file to display...
String url = "/html/searchportlet/view.jsp";
// read the above file and output it...
getPortletContext().getRequestDispatcher(url).include(renderRequest, renderResponse);
//include(viewJSP, renderRequest, renderResponse);
}
@Override
public void serveResource(ResourceRequest request, ResourceResponse response)
throws PortletException, IOException {
// TODO Auto-generated method stub
//super.serveResource(request, response);
System.out.println("In serveResource code");
response.setContentType("text/html");
String name = request.getParameter("search");
// this seems to be the page that was calling...?
String resourceID = request.getResourceID();
System.out.println("resourceId was : " + resourceID);
System.out.println("message was : " + name);
PrintWriter writer = response.getWriter();
writer.print(name);
}
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 editJSP;
protected String helpJSP;
protected String viewJSP;
private static Log _log = LogFactoryUtil.getLog(SearchPortlet.class);
}
Portlet B - view.jsp
<%@include file="/html/init.jsp"%>
<portlet:defineObjects />
<%
String name = (String)renderRequest.getParameter("name");
%>
<liferay-ui:search-container
emptyResultsMessage="author-empty-results-message">
<liferay-ui:search-container-results
results="<%= KeyurAuthorLocalServiceUtil.getStudentByName(name) %>" />
<liferay-ui:search-container-row className="com.test.model.KeyurAuthor">
<liferay-ui:search-container-column-text name="authorId"
property="authorId" />
<liferay-ui:search-container-column-text name="authorName"
property="authorName" />
<liferay-ui:search-container-column-text name="authorEmail"
property="authorEmail" />
</liferay-ui:search-container-row>
<liferay-ui:search-iterator></liferay-ui:search-iterator>
</liferay-ui:search-container>
Portlet B - SearchResultPortlet Lớp
/**
* Portlet implementation class SearchResultPortlet
*/
public class SearchResultPortlet extends GenericPortlet {
public void init() {
editJSP = getInitParameter("edit-jsp");
helpJSP = getInitParameter("help-jsp");
viewJSP = getInitParameter("view-jsp");
}
@ProcessEvent(qname="{http://liferay.com/events}ipc.pitch")
public void catchBall(EventRequest request, EventResponse response) {
Event event = request.getEvent();
String name = (String)event.getValue();
response.setRenderParameter("name", name);
}
public void doEdit(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(editJSP, renderRequest, renderResponse);
}
public void doHelp(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(helpJSP, renderRequest, renderResponse);
}
public void doView(
RenderRequest renderRequest, RenderResponse renderResponse)
throws IOException, PortletException {
include(viewJSP, 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 editJSP;
protected String helpJSP;
protected String viewJSP;
private static Log _log = LogFactoryUtil.getLog(SearchResultPortlet.class);
}
Cảm ơn bạn đã trả lời. Tôi vẫn còn nghi ngờ về điều đó. Làm thế nào tôi có thể vượt qua giá trị của hộp văn bản của tôi với trường ẩn đến portlet khác? Nó đang sử dụng ActionRequest & Response, vì vậy nó sẽ làm mới Trang. Bạn có thể vui lòng cung cấp thêm một số chi tiết trong số này ... – Scorpion
Và một điều nữa mà tôi muốn chỉ là, nếu tôi thay đổi nó từ action thành resourceURL thì nó sẽ gọi phương thức serveResource của SearchPortlet. Nhưng bây giờ từ đó làm thế nào tôi có thể vượt qua nó để portlet khác bằng cách sử dụng IPC? – Scorpion
Cảm ơn bạn rất nhiều buddyyy ... Làm việc của nó bây giờ ..... Công việc tuyệt vời .......... – Scorpion