UML软件工程组织

 

 

BEA WebLogic Workshop使用笔记之三 -- Web应用篇

 
作者:李巍 来源:dev2dev
 

续EJB开发篇,通过本文的学习,读者将能领会在WebLogic Workshop上的Pageflow应用开发。本文,我们需要建立一个简单的Web应用,提供相应的友好界面来调用刚开发完毕EJB组件,在这个web应用中我们要使用到Pageflow。

什么是 Page Flow

Page Flow是一个基于Struts1.1的web应用编程模型,替代了早期Portal产品中的web flow,不再属于Portal专有,用以实现web应用中用户界面、业务逻辑、导航控制的分离,并且大大简化了WEB应用的开发过程,提高了开发效率

为什么要使用 Page Flow?

企业的WEB应用经常由成千上万的页面组成,维护这样一个网站通常是一件复杂、枯燥、耗时的任务。Page Flow 提供了一个易使用的框架结构来建立动态、复杂的WEB应用;并且通过用户界面、业务逻辑、导航控制的分离,避免了Web开发中经常出现的一些问题,提高了业务逻辑代码的可重用性。

Page Flow 的编程模型

沿用了 Struts Model 2 的MVC模型

模型(Model M) 组成部分

该部分可以由Custom Control文件(*.jcs), Java Control文件(*.jcx), Web Service文件(*.jws)或Process文件(*.jpd)等文件装配而成。

视图(View V)

由*.jsp等文件来实现

控制器(Controller C)

由Java Page Flow文件(*.jpf )来实现

关于Page flow的更多信息请参考dev2dev中文站点上的这篇文档:

BEA Workshop8.1之Java Page Flow介绍 by Doug Dew,Java Page Flow项目经理

建立Pageflow

我们在上一章中建好的EJBTest项目上继续Web应用的开发,右键点击EJBTest项目,选择"new"一个"Page Flow"

在Design View中将index.jsp页面删除,只留下Begin按钮,然后将myControl控件的"finderByCompanyName"方法拓展到Design View中,它将在这个Pageflow中成为一个带Form Bean的action"finderByCompanyName", 同时这个Form Bean也显示在Form Beans选项版中(Form Bean是Page Flow中的数据的承载体,其一个作用是用于页面中的form提交时存储form中的数据,其实质是一个Java Bean)

右键点击刚生成的action,选择"Generate Input Page"选项,Workshop将根据你action的Form Bean的参数,自动生成一个输入页面finderByCompanyNamePage.jsp。我们调整一下它们的位置,并且从Begin节点拉一条连接线,使得Begin开始后的Page Flow走到finderByCompanyNamePage.jsp页面。

这个Page Flow开始后将走到一个输入页面finderByCompanyNamePage.jsp,让你输入finderByCompanyName需要的数据,获得数据后,将到"finderByCompanyName"action中处理。

EJB控件myControl的finderByCompanyName()方法返回的是一个EJB对象的引用,我们对其做部分处理,使得它能返回Company中的全部信息("NO"及"COMPANY_NAME"),在PageFlow中传递数据的方法有很多中比如用Request、Session、FormBean等等进行数据的传递,在本例中我们为这个Pageflow增加两个Public的String型变量 "sNO"、"sCompanyName"用来承载"COMPANY"信息。

关于PageFlow的传值的更多相关信息请读者阅读相关文档:

  • dev2dev中文站点的 《数据绑定101》 这篇文档
  • Workshop联机帮助文档 Developing Web Applications à Guide to Building Page Flows à Using Data Binding in Page Flows部分 (在Workshop中按F1出联机文档,或是直接访问http://edocs.bea.com/workshop/docs81/doc/en/core/index.html)

然后在Pageflow中,双击"finderByCompanyName"节点,进入"Source View"编辑器,更改finderByCompanyName()方法,将

myControl.finderByCompanyName()方法的返回的Company NO和Company Name赋值给相应的变量。
public class InvokeEJBPFController extends PageFlowController
{
/**
* This is the control used to generate this pageflow
* @common:control
*/
private TEJB myControl;
 
public String sNO;
public String sCompanyName;



……….

/**
* @jpf:action
* @jpf:forward name="success" path="showCompanyInfo.jsp"
*/
protected Forward finderByCompanyName(FinderByCompanyNameForm form)
{
 

SIMPLEEJB.Simple_ex sBean;

try
{
 sBean=myControl.finderByCompanyName("%"+form.getArg0()+"%");
 this.sNO= sBean.getCompanyId();
 this.sCompanyName=sBean.getCompanyName();
}
 catch(Throwable t)
{
 t.printStackTrace();
}

return new Forward( "success" );
}

"finderByCompanyName"action处理完后我们需要一个页面把这个处理结果显示出来,所以,从"Pallete"面板中拖拽出一个"page"到设计视图中,并命名为"showCompanyInfo.jsp"

双击这个showCompanyInfo.jsp页面,进入这个页面的编辑界面,我们需要对其加入部分定制代码段来显示出finderByCompanyName处理的结果。

1. 删除默认jsp页面上的文字;

2. 从"选项板"中拖拽"表格"到空白的jsp页面上,设置表格属性为4行2列;

3. 使用"表导航器"合并表头,和表尾;

4. 往表的6个表格中拖拽入"Label"标签

5. 对上诉table中的label值在属性编辑器中设定,由上至下,由左至右设定成:

Company Info
NO: {pageFlow.sNO}
Company Name: {pageFlow.sCompanyName}

"{pageFlow.sNO}"是一段表达式,"pageFlow"代表了对这个jsp所处的Page Flow对象的引用,"sNO"是这个对象的一个属性值,这对大括号的作用的是表明"pageFlow.sNO"应当做为一个表达式来处理,而不是做为一个值来被直接显示。

6. 对这个JSP页面加上返回连接,使得点击后它能返回主页面,通过拖拽的方式从"选项板"中拖拽"Anchor"标签到设计视图中,如下图设置属性,定位方式选中"调用某个操作",文本属性是这个标签的显示文字"return",操作属性的意思是这个"Anchor"标签会调用Page Flow中的那个操作,我们选择"begin",表明调用Page Flow开始节点。

7. 点击保存,回到Page Flow页面,我们运行这个Page Flow进行测试。

Page Flow的相互调用

在Workshop中开发Page Flow的相互调用也很简单,在接下来的创建Create Company Page Flow的过程中将为读者演示Page Flow调用的开发。

1. 右键点击"EJBTest"项目,选择"新建"一个"页面流",然后起名为"CreateCompany",删除无用的"index.jsp",只留下"Begin"节点,然后将TEJB.jcx控件从"应用程序"面板中拖拽到Design View中

2. 从"数据选项板"中拖拽"tEJB"控件的"create"方法到设计视图中来,它将生成一个"create"action,再右键点击这个"create"action,选择"生成输入页",入下图

3. 将"begin"节点和新生成的"createPage.jsp"页面间联线关联起来。然后再把我们刚建立好的Page Flow InvokeEJBPFController.jpf给拖拽进这个Page Flow中来,如下图

4. 右键点击新拖拽进入的"InvokeEJBPF"节点,选择"生成调用操作",再从"create"节点和"createPage.jsp"页面节点上拉出连线链接到新的"show_invokeEJBPF"节点上,如下图

5. "createPage.jsp"页面出现红色波浪线表明该页面上有错误,这个错误其实是因为我们还没有在页面上加连接到"show_invokeEJBPF"节点上的连接,所以报错,因而我们需要修改createPage.jsp页面,往其中加一个"Return Home"按钮,使其能返回主页面。

6. 再看这个CreateCompanyController.jpf,一切都ok,我们可以运行并测试它。

该EJB剩下的两个方法(FinderByNO()方法和FinderAll()方法)请读者自己练习,最后做成的Page Flow如下:

源码参见本文附的下载包。

小结

笔者期望读者通过本文的阅读及练习能够入门在BEA WebLogic Workshop上的Web App应用开发。
在下一篇使用笔记中,作者将给大家介绍如何用Workshop开发一个调用该PageFlow的Portal应用,敬请关注。

相关源文件请点击此处下载

 

组织简介 | 联系我们 |   Copyright 2002 ®  UML软件工程组织 京ICP备10020922号

京公海网安备110108001071号