| |
深入WebLogic Portal UI编程 |
|
时间: 2006-04-26 来自:天极开发 |
 |
|
四、
加入速算表功能
与打印密切相关的另外一项功能-也是商业用户最经常使用的一项功能,是操作表格数据。当然,在他们登录到你的portal的同时,你可以通过实现一些AJAX技巧以允许他们以不同方式来观看数字,而且很可能你应该这样做。但是,当用户想取走你的数据并想在飞机上操作它们时,情况会如何呢?通过对整个portal加以缓冲而使他们陷于困境,或者提示他们如何把数据复制到一个速算表(除非你有一项巨大的技术支持预算)中吗?最好不要这样。那么,你为什么不按他们想要的方式把数据给他们呢?
我们的实现思想是,首先通过标签定义得到我们的portlet的一个句柄,然后用它构建一个速算表。
注意,现在你想要在自己的页面上创建一个隐藏的iFrame来接收页面(因为其结果是一个文件,而不是一个页面)。为此,你只需把下面内容添加到footer.jsp中:
<iframe
id="scriptRender" src="" style="visibility:hidden; height:0px;
padding:0px; margin:0px"></iframe> | 然后,你要在你的jsp文件中建立一个类似于打印函数的新函数。不过这个新函数作了一些改变以隐藏被调用的页面并传递表格数据:
function excelPortlet(appPath, tableId, portletName){ var
tableData = document.getElementById(tableId).outerHTML; var pageString
=appPath+'/resources/jsp/excelPage.jsp?tableData='+tableData+'&portletName='+portletName; document.getElementById('scriptRender').src
=
pageString; } | 接下来,你要使用与前面操作打印图标类似的方式来把你的图标添加到工具栏上-当然现在你必须隐藏该图标(直到你想使用它并且参考你的表格而不是整个的portlet为止)。请参考如下代码:
<img src="<render:getSkinPath imageName="excelIcon.gif"
/>" id="<%=window.getDefinitionLabel()%>.excelIcon" style="cursor:pointer; position:relative;
top:-2px; visibility:hidden" onclick=
"excelPortlet('<%=request.getContextPath()%>', '<%=window.getDefinitionLabel()%>. excelTable',
'<%= title
%>')"> | 当然,为了使用该图标,你首先需要取消隐藏它。为此,你可以在portlet
JSP本身实现-通过添加一个到Window上下文的参考,然后再调用你的标签定义的句柄,象下面这样:
<%@ page
import="com.bea.netuix.servlets.controls.window. WindowPresentationContext"%> <% WindowPresentationContext
window
=WindowPresentationContext. getWindowPresentationContext(request); %> <script
language="javascript"> document.getElementById('<%=window.getDefinitionLabel()%>.excelIcon') .style.visibility
=
'visible'; </script> | 当然,你还要编写一个简短的JSP来生成你的速算表:
<%@ page language="java"
contentType="text/html;charset=UTF-8"%> <% String tableData =
request.getParameter("tableData"); response.reset(); response.setContentType("application/xls"); response.setHeader("Content-Disposition","attachment;filename="
+request.getParameter("portletName") +".xls"); %> <%=tableData%> | 在隐藏的iFrame和响应变化这一时间段内,用户只能看到下载部分,而不会看到屏幕后台的逻辑实现:
如果你在表格的标题行上使用了<th>标签,那么Excel将把它设置为一个标题行以便于可能的进一步排序。
如果你在一个portlet中有多张表,你可以使用相同的参考ID来打开该图标从而动态地设置脚本调用。
|
|
|
|
|
|
标签NewsAbout错误:Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
|
|
|
|
|
|