0

有一个数据库服务器和一个安装了 portlet 的门户。Portlet 代表一个视图,分为两部分。在左侧有一个导航树。当用户单击树节点时,他从数据库服务器获取信息,portlet 应该在视图的右侧显示此信息。

我假设 portlet 视图页面包含 javascript 代码,当用户单击树节点时,portlet 向 servlet 发送请求,获取 servlet 响应,解析它并更新视图。

Portlet 视图布局如下所示:

如果它只是基于 servlet 的应用程序,那么我将实现从页面到服务器的 javascript 调用,返回 json,在页面上解析它并更新页面表示。

但是 java portlet 有点不同,我没有找到方法来做到这一点。

我的问题是有一种方法可以将带有 portlet 的 servlet 打包到一个 *.war 文件中,并实现从 portlet 到该 servlet 的请求。Portlet 将所有请求发送到该 servlet,然后 servlet 访问数据库服务器,然后将结果发送到该 portlet。

如果答案是“是” - 我该怎么做。因为我尝试用portlet 打包servlet,但是这样的portlet 不起作用。

如果答案是“否”——在 portlet 中实现这个“数据查询->响应->更新视图”序列的最佳方法是什么?

谢谢你。

4

2 回答 2

0

我的非工作 servlet+portlet 组合的原因是 portlet 视图 jsp 中指定的 servlet 的路径不正确。

现在任务已解决,下面有详细信息。我认为这将帮助面临同样问题的人。

假设,我们有一个 servlet GetData,它执行以下操作:

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/plain;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        out.println("Hello there! Привееееет!");
    } finally {            
        out.close();
    }
}

下面有代码TestPortlet_view.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

  <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
  <script>
  function loadData() {
    $.get('<%=request.getContextPath()%>' + '/GetData', function(data) {
        alert(data);
    });    
  }
  </script> 
 <input type="button" value="Hit me" onClick="javascript:loadData();"/>

下面是 Portlet 在门户上部署时的图片。

当我们点击按钮时:

瞧,它有效:)

特别感谢McDowell的提醒。

于 2013-04-05T16:14:32.637 回答
0

很高兴您对您想要做的事情有答案,但我认为使用 portlet API 中的 serveResource 方法来执行此操作可能更简单、更清晰。在 portlet 2.0 规范中添加 serveResource 方法的主要原因之一是使 portlet 中的 AJAX 功能更简单。

于 2013-04-05T17:45:14.877 回答