有一个数据库服务器和一个安装了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中实现此“数据查询 - >响应 - >更新视图”序列的最佳方法是什么?
谢谢。
答案 0 :(得分: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部署在门户网站上的图片。
当我们点击按钮时:
Voila,它有效:)
特别感谢McDowell提醒。
答案 1 :(得分:0)
很高兴您已经回答了您想要做的事情,但我认为使用portlet API中的serveResource方法执行此操作可能更简单,更简洁。在portlet 2.0规范中添加serveResource方法的主要原因之一是使portlet中的AJAX功能更简单。