2

我制作了一个 JSR 168 portlet,如下所示:

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);
    }
}

用于此的 portlet 被命名为 getTest.portlet 并且位于 WebContent 文件夹中。这个的jsp页面:

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

现在我想使用 Weblogic 的 DISC 框架向这个 portlet 发出 Ajax get 请求。我怎样才能做到这一点?

我在网上对此进行了搜索,但没有任何有用的示例可以使用。我尝试过的如下:

在其他一些.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”,因为它在这个 portlet 的 jsp 页面中。我怎样才能做到这一点?

我阅读了以下文章,但没有发现任何有用的东西,或者我可能错过了一些东西。

我还为附加此 portlet 的桌面门户启用了光盘。

4

1 回答 1

0

最后,我自己找到了。我需要使用 JSR 286 portlet 的 Resource Serving 特性来通过 Ajax 请求获取数据。你需要做的是:

  1. 构建您的 portlet 的资源 url:<portlet:resourceURL var="homeURL" id="home" escapeXml="false" />
  2. 使用此 url 向您的 portlet 发出 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. 在 portlet 中,在serveResource(ResourceRequest request, ResourceResponse response)方法中编写您的逻辑。将数据值设置为请求的属性,然后转发请求,使用请求分流器响应 JSP 页面。或者您可以直接将 JSON 格式的数据值写入响应写入器。( response.getWriter())
  4. 如果您选择将数据传递到 JSP 页面,则在 JSP 页面上从请求属性中获取数据并根据需要显示它们。
  5. 如果您选择使用响应编写器以 JSON 格式传递数据,那么您需要在 JavaScritp 中解析该数据,然后以适当的格式显示它们。
  6. 而且,如果您将数据传递给 portlet,您就可以像使用 Ajax 请求将数据传递给 servlet 一样轻松地传递它。在这一行request.send(null)中,而不是null传递您的数据。

希望这对未来的访客有所帮助。:-)

我仍然不确定这是否是最好的方法。任何其他解决方案总是受欢迎的。

于 2012-05-12T06:15:00.787 回答