本教程介绍了如何使用 Sun Java Studio Creator 集成开发环境 (integrated development environment, IDE) 开发一个用于提供门户内容的、与 JSR-168 兼容的 JavaServer Faces Portlet 应用程序。门户是基于用户输入为来自各种源的内容提供定制视图的 Web 站点。门户服务器包含用于生成定制 Web 内容片段的 Portlet,并组装(或聚合)各片段以创建定制 Web 页。
开发 Portlet 应用程序与开发 Web 应用程序类似。在学习本教程之前,您需要熟悉应用程序的开发过程。为此,请学习任何 Java Studio Creator 教程。Java Studio Creator 入门指南是对 IDE 的介绍。 |
|
目录
|
![[spacer]](/im/a.gif) |
 |
关于 Portlet
开发 Portlet 与开发常规 Web 应用程序类似,但它们处理某些任务(如通过在一个页上执行操作在另一页上设置值)的方式是不同的。此外,JSR-168 标准定义了以下三种 Portlet 模式(这些模式决定 Portlet 所显示内容的类型):
- 查看。查看模式生成用户与之交互的 Portlet 页面,为缺省模式。
- 编辑。编辑模式使户可以定制 Portlet 的行为。
- 帮助。帮助模式提供 Portlet 的帮助信息。
每种模式都独立于其他模式,具有自己的页面导航,并通过执行特定操作访问。例如,在与 IDE 捆绑在一起的 Apache Pluto 门户服务器中,用户可以通过单击门户服务器的“编辑”、“帮助”和“查看”按钮来切换模式。有关 Pluto Portal 服务器的详细信息,请参见 Apache Pluto 门户项目站点。
在本教程中,您将学习如何创建查看模式页、编辑模式页和帮助模式页,以及如何为编辑模式和帮助模式指定初始页。接下来,您将学习如何通过在会话 Bean 上创建和设置属性,来使用按钮在 Portlet 页面上设置值。最后,您将学习如何从 Portlet 访问 Web 服务。
创建 Portlet 项目
- 在主菜单中,选择“文件”>“新建项目”。
- 在“新建项目”向导中,从“类别”列表中选择 "Web",然后从“项目”列表中选择“JSR-168 JSF Portlet 项目”。
- 单击“下一步”。
- 将项目命名为
PortletEx。
- 单击“下一步”。将打开“Portlet 部署描述符”窗口,如下图所示。
图 1:“Portlet 部署描述符”对话框 |
- 单击“完成”以接受缺省值。
PortletEx 的初始页 PortletPage1 在可视设计器中打开,如下图所示。
图 2:初始 Portlet 页 |
缺省情况下,IDE 将在查看模式下创建页。PortletPage1 是查看模式下的缺省初始页。
请注意,Portlet 项目的设计视图网格的一部分带有阴影。设计视图网格的白色部分是在门户服务器中显示的内容。回想一下,您要生成一个 Web 内容片段,门户服务器将该片段聚合到完整 Web 页中。
可以使用“属性”窗口中的“页面布局”下拉列表,选择 Portlet 页面布局。流布局允许 Web 浏览器确定页面布局。选择“流布局”后,您几乎不可以控制 Web 浏览器呈现页面的方式。网格布局可以辅助组件在 Portlet 页面上的绝对定位:所见即所得。网格布局不仅是首选的布局模式,而且也是常规 Web 应用程序以及 Portlet 应用程序的缺省布局模式。在本教程中,您将使用网格布局。
添加查看模式页
在本部分中,您将创建两个查看模式页,每个页都包含一个静态文本字段和一个用于导航到另一页的按钮,如下图所示。
图 3:页面设计 |
- 将一个“静态文本”组件拖动到 Portlet 页面上,并将其 text 属性更改为
Welcome to Page 1。
- 将一个“按钮”组件拖动到页面上,并将其 text 属性更改为
Go To Page 2。
- 在“项目”窗口中,右键单击 "PortletEx" >“Web 页”,然后从弹出式菜单中选择“新建”>“Portlet 页”。
将打开“新建 Portlet 页”向导。
- 在“文件名”字段中键入
PortletPage2(没有空格),然后单击“完成”。
PortletPage2 将在可视设计器中打开。
- 将一个“静态文本”组件拖动到页面上,并将其 text 属性更改为
Welcome to Page 2。
- 将一个“按钮”组件拖动到页面上,并将其 text 属性更改为
Go To Page 1。
设置页面导航
- 在可视设计器中的任意位置单击鼠标右键,然后从弹出式菜单中选择“面页导航”。
将打开“页面导航”窗口。
- 单击 PortletPage1.jsp 图标,从 PortletPage1.jsp 上的按钮拖动到 PortletPage2.jsp,然后键入
GotoPage2 以更改连线名称。
- 单击 PortletPage2.jsp 图标,从 PortletPage2.jsp 上的按钮拖动到 PortletPage1.jsp,然后键入
GotoPage1 以更改连线名称。
- 单击工具栏上的“运行”按钮部署 Portlet 应用程序。
Portlet 将显示在 Web 浏览器的“Apache Pluto 门户”服务器窗口中。
单击 "Go To Page 2" 按钮时,Apache Pluto 门户服务器将显示 PortletPage2,如下图所示。单击 "Go To Page 1" 按钮将返回到 PortletPage1。
图 4:Portlet 的第二页 |
添加编辑和帮助模式页
在 Apache Pluto 门户服务器中,用户可以单击“查看”、“编辑”或“帮助”按钮来切换模式。下图显示了 Pluto 门户服务器的模式导航按钮。
图 5:门户模式导航 |
切换模式再返回到以前模式时,用户将返回到以前模式的初始页,而不是他们所查看的最后一页。例如,如果用户在查看模式下导航到第二页,切换到编辑模式,然后切换回查看模式,则用户将返回到查看模式的第一页而不是第二页。
在此处您可以确定切换模式时用户看到的初始页。
- 创建新的页面。在“项目”窗口中,右键单击 "PortletEx" >“Web 页”,然后选择“新建”>“Portlet 页”。将新的 Portlet 页命名为
Edit1,然后单击“完成”。
- 将一个“标签”组件拖动到页面上,然后键入
Welcome to Edit Mode!。
- 在“项目”窗口中,右键单击 "PortletEx" >“Web 页”> "Edit1.jsp",然后从弹出式菜单中选择“设置为初始页”>“编辑模式页”。
- 生成并运行 Portlet 应用程序。单击 Pluto 门户服务器的“编辑”按钮以查看页,如下图所示。
图 6:编辑模式页 |
下面将按照类似的过程设置帮助模式的初始页。
- 创建新的页面。在“项目”窗口中,右键单击 "PortletEx" >“Web 页”,然后选择“新建”>“Portlet 页”。将新的 Portlet 页命名为
Help1。
- 将一个“标签”组件拖动到页面上,然后键入
Welcome to Help Mode!。
- 在“项目”窗口中,右键单击 "PortletEx" >“Web 页”> "Help1.jsp",然后从弹出式菜单中选择“设置为初始页”>“帮助模式页”。
- 生成并运行 Portlet 应用程序。单击 Pluto 门户服务器的“帮助”按钮以查看页。
- 通过选择“文件”>“关闭 "PortletEx"”,关闭 PortletEx 项目。
在下一部分中,您将创建一个新的 Portlet 项目,并为其添加 Web 服务。
将 Web 服务添加到 Portlet
在本部分中,将 WorldTime 样例 Web 服务添加到 Portlet,并通过单击同一页上的按钮来学习如何在页面上设置值。页面设计与下图类似。
图 7:WorldTime 服务的页面设计 |
- 创建一个新的 JSR-168 JSF Portlet 项目,并将其命名为 PortletWS。
- 将一个“按钮”组件从组件面板的“基本”类别拖动到 PortletPage1 上,键入
The time is...,然后按 Enter 键。在“属性”窗口中,将其 id 属性设置为 timeButton。
- 将一个“静态文本”组件拖动到页面上,并将其放在“按钮”组件的下方。
- 在“服务器”窗口中,展开“Web 服务”>“样例”,如下图所示。
图 8:选择 WorldTime Web 服务 |
- 将 "WorldTime" 样例 Web 服务拖放到 PortletPage1 上。
worldTimeClient1 将显示在“概要”窗口中,如下图所示。
图 9:“概要”窗口中的 worldTimeClient1 |
- 测试 WorldTime 样例 Web 服务。在“服务器”窗口中,展开“样例”>“WorldTime Web 服务”节点。将出现方法列表。右键单击第二个
tzStampNow 方法,然后从弹出式菜单中选择“测试方法”,如下图所示。
图 10:测试 tzStampNow 方法 |
将显示“测试 Web 服务方法”对话框。
tzStampNow 采用类型均为 java.lang.String 的两个参数:tZone(时区)和format(结果的格式规范)。键入 tZone 的值 PST 和 format 的值 MM-dd-yyyy HH:mm:ss,如下图所示。
图 11:tzStampNow 参数值 |
- 单击“提交”按钮。如果测试成功,则 java.lang.String 类型的值将显示在对话框的“结果”部分中。单击“关闭”按钮关闭“测试 Web 服务方法”对话框。
如果打开一个错误对话框,显示 InvocationTargetException 错误消息,请确保您的 HTTP 代理服务器设置正确无误 。
创建会话 Bean 属性
- 在“概要”窗口中,右键单击 "SessionBean1" 节点,然后从弹出式菜单中选择“添加”>“属性”。
- 在“新建属性模式”对话框中,键入新属性的名称
time,然后单击“确定”。
新属性 time 将被添加到 SessionBean。
- 要将“静态文本”组件绑定到 time 属性,请右键单击“静态文本”组件,然后从弹出式菜单中选择“绑定到数据”。
- 在“绑定到数据 - StaticText1”对话框中,单击“绑定到对象”标签。打开“选择绑定目标”窗格。
- 选择 "SessionBean1" > "time",如下图所示。
图 11:将 time 属性绑定到 staticText1 |
- 单击“确定”。
请注意,静态文本组件在可视设计器中发生了改变。
- 双击
The time is... 按钮,然后将以下代码(以粗体显示)添加到 timeButton() 方法。插入代码后,可以按 Ctrl-Shift-F 组合键自动重新设置代码格式。
| 代码样例 1:WorldTime Web 服务 timeButton_action() 方法 |
public String timeButton_action() {
String result = "";
try {
result = this.getWorldTimeClient1().tzStampNow("PST",
"MM-dd-yyyy HH:mm:ss");
} catch (Exception e) {
log("Page1 failure with web service", e);
}
this.getSessionBean1().setTime(result);
return null;
}
|
- 运行并部署 Portlet。单击
The time is... 按钮时,将显示当前的太平洋标准时间,与下图类似。
图 12:显示当前时间的 Portlet |
执行其他的 Portlet 操作
小结
在本教程中,您学习了如何设计和部署简单的导航 Portlet,如何为编辑模式和帮助模式添加页,如何在用户单击同一页上的按钮时使用 SessionBean 属性在 Portlet 页上设置值,以及如何将 Web 服务添加到 Portlet。
另请参见
此页的最新修改时间:2006 年 1 月 25 日
|