2012-05-02 4 views
2

Я сделал JSR 168 портлет следующим образом:потребление AJAX в WebLogic портлета с помощью рамки 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 получить запрос на портлета с помощью DISC рамки Weblogic. Как я могу это сделать?

Я искал в сети относительно этого, но не использовал какой-либо полезный пример, который я могу использовать. То, что я попытался это следующим образом:

в некоторых 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> 
.... 

В боевой готовности я получаю пустой. Я должен получить «Params: hi», как на странице jsp этого портлета. Как я могу это достичь?

Я прочитал следующие статьи, но не нашел ничего полезного или, возможно, что-то пропустил.

Я также включен диск для настольного портала, в котором закреплен портлет.

ответ

0

Наконец-то я нашел его сам. Мне нужно использовать функцию обслуживания ресурсов портлета JSR 286 для получения данных через запрос Ajax. Что вам нужно сделать, это:

  1. Построить ресурс URL вашего портлета: <portlet:resourceURL var="homeURL" id="home" escapeXml="false" />
  2. Используйте этот URL, чтобы сделать запрос Ajax для вашего портала.

    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. В портлете напишите свою логику в методе serveResource(ResourceRequest request, ResourceResponse response). Задайте значения данных в качестве атрибутов для запроса и последующего запроса, ответ на страницу JSP с помощью диспетчера запросов. Или вы можете напрямую записывать значения данных в формате JSON в автоответчик. (response.getWriter())
  4. Если вы решите передать данные на страницу JSP, то на странице JSP получить данные из атрибутов запроса и отобразить их по мере необходимости.
  5. Если вы решите передать данные в формате JSON с помощью автоответчика, вам необходимо проанализировать эти данные в JavaScritp, а затем отобразить их в соответствующем формате.
  6. И если вы передаете данные в портлет, вы можете легко передать его так же, как передать его сервлету с помощью запроса Ajax. В этой строке request.send(null) вместо null передайте свои данные.

Надеюсь, что это поможет будущим посетителям. :-)

Тем не менее я не уверен, что это лучший способ сделать это. Любые другие решения всегда приветствуются.