Использование 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 этого портлета. Как мне этого добиться?
Я прочитал следующие статьи, но не нашел ничего полезного или, может быть, я что-то пропустил.
- http://docs.oracle.com/cd/E13155_01/wlp/docs103/clientdev/disc.html
- http://docs.oracle.com/cd/E13155_01/wlp/docs103/clientdev/rest.html
- https://blogs.oracle.com/satya/entry/new_feature_resource_serving_in
- http://docs.oracle.com/cd/E13155_01/wlp/docs103/clientdev/publishing.html
Я также включил диск для портала рабочего стола, к которому подключен этот портлет.
1 ответ
Наконец я нашел это сам. Мне нужно использовать функцию обслуживания ресурсов портлета JSR 286 для получения данных через Ajax-запрос. Что вам нужно сделать, это:
- Создайте URL ресурса вашего портлета:
<portlet:resourceURL var="homeURL" id="home" escapeXml="false" />
Используйте этот 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);
- В портлете напишите свою логику в
serveResource(ResourceRequest request, ResourceResponse response)
метод. Установите значения данных в качестве атрибутов для запроса, а затем перенаправьте запрос, ответ на страницу JSP с помощью диспетчера запросов. Или вы можете напрямую записывать значения данных в формате JSON в средство записи ответов. (response.getWriter()
) - Если вы решите передать данные на страницу JSP, то на странице JSP получите данные из атрибутов запроса и отобразите их по мере необходимости.
- Если вы решите передать данные в формате JSON с помощью средства записи ответов, вам необходимо проанализировать эти данные в JavaScritp и затем отобразить их в соответствующем формате.
- И если вы передаете данные в портлет, вы можете легко передать их так же, как вы передаете их сервлету с помощью Ajax-запроса. В этой строке
request.send(null)
вместоnull
передать ваши данные.
Надеюсь, это поможет будущим посетителям. :-)
Тем не менее, я не уверен, что это лучший способ сделать это. Любые другие решения всегда приветствуются.