2012-05-02 74 views
2

我做了一個JSR 168的portlet如下的WebLogic portlet的AJAX消費:使用DISC框架

public class GetTest extends GenericPortlet { 
    @Override 
    public void doView(RenderRequest request, RenderResponse response) 
      throws PortletException, IOException { 
     PortletRequestDispatcher rd = 
         getPortletContext().getRequestDispatcher("/getTest.jsp"); 
     rd.include(request, response); 
    } 
} 

這樣做的門戶被命名爲getTest.portlet並在WebContent文件夾。這個JSP頁面:

<% 
    String params = request.getParameter("params"); 
    out.print("Params: " + params); 
%> 

現在我想打一個Ajax get請求使用WebLogic的DISC框架此portlet。我怎樣才能做到這一點?

我在網上搜索這個,但沒有任何有用的例子,我可以使用。我曾嘗試如下:

在一些other.jsp

..... 
<script type="text/javascript"> 
    var dataUrl = "/getTest.portlet?params=hi"; 
    var xmlhttp = new bea.wlp.disc.io.XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
     if ((xmlhttp.readyState == 4) && (xmlhttp.status == 200)) { 
      alert(xmlhttp.responseText); 
     } 
    } 
    xmlhttp.open('GET', dataUrl, true); 
    xmlhttp.send(null); 
</script> 
.... 

在警告我得到的空白。我應該像在此portlet的jsp頁面中那樣獲得「Params:hi」。我怎樣才能做到這一點?

我看了下面的文章,但沒有找到任何有用的東西或可能是我錯過了一些東西。

我也啓用了光盤在此portlet連接桌面門戶。

回答

0

最後,我自己找到了。我需要使用JSR 286 portlet的資源服務功能通過Ajax請求獲取數據。你需要做的是:

  1. 建立自己的門戶的資源網址:<portlet:resourceURL var="homeURL" id="home" escapeXml="false" />
  2. 使用此URL做一個Ajax請求您的portlet。

    var path="<%=homeURL.toString()%>"; 
    request.onreadystatechange=function() { 
        if (request.readyState == 4) { 
         if (request.status == 200) { 
          alert(request.responseText); 
         } else { 
          alert("Problem retrieving data from server."); 
         } 
        } 
    }; 
    request.open("GET", path, true); 
    request.send(null); 
    
  3. 在portlet中寫你的邏輯在serveResource(ResourceRequest request, ResourceResponse response)方法。將數據值設置爲請求的屬性,然後使用請求分段器轉發請求,響應JSP頁面。或者您可以直接將數據值以JSON格式寫入響應書寫器(response.getWriter()
  4. 如果您選擇將數據傳遞到JSP頁面,那麼在JSP頁面上從請求屬性獲取數據並根據需要顯示它們。
  5. 如果您選擇使用響應書寫器作爲JSON格式傳遞數據,則需要在JavaScritp中解析該數據,然後以適當的格式顯示它們。
  6. 如果您將數據傳遞給portlet,您可以使用Ajax請求以相同的方式將它傳遞給servlet。在這一行request.send(null)而不是null傳遞你的數據。

希望這可以幫助未來的遊客。 :-)

不過我不確定這是否是最好的方法。任何其他解決方案總是受歡迎。