2011-08-30 107 views
2

我在liferay中创建了一个portlet(这是我的第一个portlet)。在那里,我遵循了liferay的mvc结构。它 的Java文件如下: - 我的呼唤fetchdataAction()使用AJAX从view.jsp的Ajax in liferay portlet

package com.liferay.samples; 

import java.io.IOException; 
import javax.portlet.ActionRequest; 
import javax.portlet.ActionResponse; 
import javax.portlet.PortletException; 
import javax.portlet.PortletPreferences; 
//import javax.portlet.GenericPortlet; 
import com.liferay.util.bridges.mvc.MVCPortlet; 

public class MyGreetingPortlet extends MVCPortlet { 

    @Override 
    public void processAction(
      ActionRequest actionRequest, ActionResponse actionResponse) 
     throws IOException, PortletException { 

     PortletPreferences prefs = actionRequest.getPreferences(); 

     String greetingname = actionRequest.getParameter("greetingname"); 
     String greeting  = actionRequest.getParameter("greeting"); 

     if (greeting != null && greetingname != null) 
     {  

      prefs.setValue(greetingname, greeting); 
      prefs.store(); 
     } 
     //System.out.println("In doView code"); 
     super.processAction(actionRequest, actionResponse); 
    } 
    public void fetchdataAction(ActionRequest actionRequest, ActionResponse actionResponse) 
     throws IOException, PortletException { 
     System.out.println("In doView code"); 
     //super.fetchdataAction(actionRequest, actionResponse); 

    } 

} 

,但却将其返回任何内容。如下 view.jsp的文件: -

<%@ taglib uri="http://java.sun.com/portlet_2_0" prefix="portlet" %> 
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui" %> 
<%@ page import="java.util.*" %> 
<%@ page import="javax.portlet.PortletPreferences" %> 
<portlet:defineObjects /> 
<div id="ContentGreeting"> 
This is the <b>Thired Test</b> portlet. 
<% 


    PortletPreferences prefs = renderRequest.getPreferences(); 
//forEachPreference 
    //String em[]   = String[2]; 
    //em      = prefs.getValues(); 
    Enumeration em   = prefs.getNames(); 
    //ArrayList aList = Collections.list(em); 
    //out.println("value :-"+ aList.get(1)); 
    String[] greeting   = new String[3]; 
    int i=0; 
    while(em.hasMoreElements()) 
    { 
     String key = (String)em.nextElement(); 
     greeting[i] = (String)prefs.getValue(

     key, "Hello! Welcome to our portal."); 
     //out.println("<br> value :"+greeting); 


%> 
<p id='id<%= i %>' onclick="ajaxcallTofetchpage();"><%= greeting[i] %></p> 
<portlet:renderURL var="editGreetingURL"> 

    <portlet:param name="jspPage" value="/edit.jsp" /> 

</portlet:renderURL> 

<a href="<%= editGreetingURL %>&greetingname=<%= key %>">Edit greeting</a> 

<% 
    i++; 
    } 
%> 
</div> 
<portlet:renderURL var="addGreetingURL"> 

    <portlet:param name="jspPage" value="/add.jsp" /> 

</portlet:renderURL> 

<p><a href="<%= addGreetingURL %>">Add greeting</a></p> 
<portlet:resourceURL var="fetchdataAction"> 

    <portlet:param name="fetchdataAction" value="/view.jsp" /> 

</portlet:resourceURL> 

<script> 
    //$("#id1").hide("slow"); 
    function ajaxcallTofetchpage() 
    { 
     $.ajax({ 
      type: "POST", 
      url: "<%= fetchdataAction %>", 
      data: "name=John", 
      success: function(msg){ 


      alert(msg); 

      } 
     }); 
    } 
</script> 

如果你能帮助我,这将是对我很大的帮助。

回答

8

而不是创建fetchDataAction(ActionRequest request, ...)方法,您需要覆盖serveResource(ResourceRequest request, ...)

public void serveResource(ResourceRequest request, ResourceResponse response) 
    throws IOException, PortletException { 

    String jspPage = resourceRequest.getParameter("fetchDataAction"); 
      if (jspPage != null) { 
     include(jspPage, request, response, PortletRequest.RESOURCE_PHASE); 
    } 
    else { 
     super.serveResource(request, response); 
    } 
} 

HTH

+0

嗨Stackfish, 我希望做同样的事,但在不同的方式。我有2个Portlet。 1)搜索和2)用于显示搜索结果..我没有AJAX调用成功完成。现在我想使用Ajax。你能指导我怎么做到这一点?我正在使用Inter Portlet通信(IPC)机制。请引导我实现这一目标。我在这方面苦苦挣扎了这么久......谢谢 – Scorpion