分享
 
 
 

深入WebLogicPortalUI编程

王朝other·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

提要 本文重点讨论如何利用BEA WebLogic portal所提供的新功能实现UI(titlebar)的定制开发。

一、 引言

也许,没有什么比发行你的第一个portal产品更让你激动的了。在经过长时间的努力后,你(和你的团队)所倾力开发的应用程序终于与用户见面了!然而,本文不是教给你如何进行基本的portal开发,而是探讨如何为你的现有portal加入新的功能。

本文将描述有关BEA WebLogic portal的一些非常有用的新特征-你可以借助这些特征来扩展你的portal页面功能。

二、 定制Titlebar

假如你已经使用过所有内置的titlebar功能,那么你可以很轻易地实现titlebar的定制--你仅需要把一些新图标放到其上即可。首先,让我们看一下BEA为portal开发在titlebar所提供的内置功能(分别对应四个图标):

· Minimize:假如页面上有相当多的portlet以至于用户想最小化其中的某些以便看清其它portlet,那么在设计初期可能把它们分解成独立的页面更好些。

· Maximize:这在使用一种多列布局时非常有用,尽管通常情况下,许多用户更喜欢单列布局。

· Delete:假如不进行编程,那么这个图标不会作为用户设置数据的一部分而存储起来;因此这有可能惹恼你的用户-每次必须返回。更不用提,假如他们真正想要返回的话,他们不得不开始一个新的会话。

· Help:这项功能几乎是必须的。

因此,对大多数用户来说,在titlebar中只放置一个图标就够了。然而,下面我们将具体讨论如何进一步定制titlebar-再添加两个用户常用图标。

三、 加入打印图标

我们知道,现在已经到了无纸办公时代。尽管如此,portal用户仍会使用打印图标。而实际上,除了昂贵的报告和旅行计划外,他们真正想要打印的其实只是该页面的一部分:单个的portlet。作为开发者,只要用户需要,我们就应该尽最大努力满足他们的要求。因此,下面我将向你介绍怎样打印单个的portlet。

注重,本文中的例程实现与命名惯例有一定联系。但是,我们所使用的命名不会影响真正的实现机制。首先,让我们来看一下window.jsp文件中的下面一行代码:

<render:writeAttribute name="id"

value="<%= window.getPResentationId() %>"/>

在此,你仅需要把ID值改变为window.getDefinitionLabel(),因为它可由所有版本的portal从任何存在Window上下文的地方进行存取。

现在,既然你已经有一个该portlet的句柄,那么你可以创建一个能够打开一个可打印页面的小脚本。

function printPortlet(appPath, portletId, portletName){

var pageString = appPath+'/resources/jsp/

printPage.jsp?portletId='+portletId;

var printWindow = window.open(pageString, 'PrintPage',"location=no,scrollbars=no,resizable");

printWindow.focus();

}

上面的脚本应该驻留在一个.js文件中,这样在每个页面上就可以只加载单个副本。

然后,打开titlebar.jsp并且找到下面内容:

<td class="bea-portal-window-titlebar-buttons"

nowrap="nowrap">

在这个空的td(填充了BEA图标)中,放入你的打印图标和一个对你的脚本的调用。为了实现可移植性,你要动态地传入参数:

<img src="<render:getSKINPath

imageName="printerIcon.gif" />"

style="cursor:pointer; position:relative; top:-2px"

onclick="printPortlet('<%=request.getContextPath()%>',

'<%=window.getDefinitionLabel()%>')">

这样就可以使你的新图标出现在你的用户titlebar中:

最后,你需要创建你自己的打印页面以使该图标做一些有用的事情。因为该页面不是portal上下文的一部分,所以你需要硬编码你的样式参考(style reference)。另外,由于在标准框架中的嵌套DIV的继续特点,所以你需要一些正式生成的Html,后面再另上你的脚本生成和打印该portlet的部分代码:

<%@ page language="java"

contentType="text/html;charset=UTF-8"%>

<%@ taglib uri="netui-tags-html.tld" prefix="netui"%>

<netui:html>

<head>

<title>

Portlet Print Page

</title>

<meta name="bea-portal-meta-skin"

content="/framework/skins/default"/>

<meta name="bea-portal-meta-skin-images"

content="/framework/skins/default/images"/>

<link href="/snelsondemo/framework/skins/default/

CSS/body.css"

rel="stylesheet" type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

css/button.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

alert/css/window-alert.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

css/window.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

plain/css/window-plain.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

css/portlet.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

css/book.css"

rel="stylesheet"/>

<link href="/snelsondemo/framework/skins/default/

css/layout.css"

rel="stylesheet"

type="text/css"/>

<link href="/snelsondemo/framework/skins/default/

css/form.css"

rel="stylesheet"

type="text/css"/>

<script type="text/Javascript"

src="/snelsondemo/framework/skins/default/js/

menu.js"></script>

<script type="text/javascript"

src="/snelsondemo/framework/skins/default/js/

util.js"></script>

<script type="text/javascript"

src="/snelsondemo/framework/skins/default/js/

delete.js"></script>

<script type="text/javascript"

src="/snelsondemo/framework/skins/default/js/

float.js"></script>

<script type="text/javascript"

src="/snelsondemo/framework/skins/default/js/

menufx.js"></script>

<script type="text/javascript"

src="/snelsondemo/framework/skins/default/js/

skin.js"></script>

<style type="text/css">

.bea-portal-window-titlebar-title{font-weight:bold}

</style>

</head>

<body class="bea-portal-body">

<div class="bea-portal-book-primary">

<div class="bea-portal-book-primary-content">

<div class="bea-portal-book-primary-page"

style="margin-right:10px">

<div id="portletHtml"

class="bea-portal-window">

</div>

</div>

</div>

</div>

<script language="JavaScript">

var portletId = '<%=request.getParameter("portletId")%>';

document.getElementById('portletHtml').innerHTML =

self.opener.document.getElementById(portletId).

innerHTML;

window.print();

</script>

</body>

</netui:html>

阅读完上面的标注和代码后,你就会看到,我们已定义的标签现在可用于填充我们的弹出菜单-通过仅使用portlet实现,从而使该页面的其它空间用于实现打印,如下图所示:

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有