Использование AJAX портлета weblogic с использованием среды DISC

Я сделал портлет JSR 168 следующим образом:

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. Как я могу это сделать?

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

в каком-то другом.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: привет", как это на странице JSP этого портлета. Как мне этого добиться?

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

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

1 ответ

Решение

Наконец я нашел это сам. Мне нужно использовать функцию обслуживания ресурсов портлета 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 передать ваши данные.

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

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

Другие вопросы по тегам