seam使JSF和EJB3整合的天衣无缝,使得页面和后台代码实现了组件化,并且实现了针对客户一次操作会话管理。使用seam开发减少了大部分xml文件的配置。大量的注解封装了强大的功能,至少减少了30%的代码量。强大的功能,仅需少量的代码实现。
本文描述页面流程的开发过程,演示一个页面流的长会话功能。使用三个页面,输入表单信息,在最后的页面统一将三个页面所添加的内容统一保存到数据表内。
具体细节如下:
1 定义一个实体有7个属性,分别为主键、页面1标题、页面1内容、页面2标题、页面2内容、页面3标题、页面3内容。
2 基于eclipse的jbpm可视化插件,编写jpdl流程定义语言。
3 定义有状态的session bean。用于实现业务逻辑,这里主要用于开始页面流程、页面跳转和数据持久化。
4 定义三个xhtml页面,用于表单录入与提交。
5 在War目录下定义components.xml文件,加载流程定义描述,这里虽然使用jbpm但页面流不会持久化到数据库当中,页面流只负责页面级的页面流转。
6 配置page.xml 实现页面导航。
具体代码如下:
1 实体WorkFlowDoc
/*******************************************************************************
* 文件名:WorkFlowDoc.java<br>
* 版本: <br>
* 描述: <br>
* 版权所有: <br>
* //////////////////////////////////////////////////////// <br>
* 创建者: 沙振中 <br>
* 创建日期: May 12, 2009 <br>
* 修改者: <br>
* 修改日期: <br>
* 修改说明: <br>
******************************************************************************/
package org.shaneseam.entitybean;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import org.jboss.seam.annotations.Name;
@Entity
@Name("workFlowDoc")
public class WorkFlowDoc {
Long workFlowId;
String workOneTitle;
String workOneContext;
String workTwoTitle;
String workTwoContext;
String workThreeTitle;
String workThreeContext;
public WorkFlowDoc()
{}
/**
* @return the workFlowId
*/
@Id @GeneratedValue
public Long getWorkFlowId() {
return workFlowId;
}
/**
* @param workFlowId the workFlowId to set
*/
public void setWorkFlowId(Long workFlowId) {
this.workFlowId = workFlowId;
}
/**
* @return the workOneTitle
*/
public String getWorkOneTitle() {
return workOneTitle;
}
/**
* @param workOneTitle the workOneTitle to set
*/
public void setWorkOneTitle(String workOneTitle) {
this.workOneTitle = workOneTitle;
}
/**
* @return the workTwoTitle
*/
public String getWorkTwoTitle() {
return workTwoTitle;
}
/**
* @param workTwoTitle the workTwoTitle to set
*/
public void setWorkTwoTitle(String workTwoTitle) {
this.workTwoTitle = workTwoTitle;
}
/**
* @return the workTwoContext
*/
public String getWorkTwoContext() {
return workTwoContext;
}
/**
* @param workTwoContext the workTwoContext to set
*/
public void setWorkTwoContext(String workTwoContext) {
this.workTwoContext = workTwoContext;
}
/**
* @return the workThreeTitle
*/
public String getWorkThreeTitle() {
return workThreeTitle;
}
/**
* @param workThreeTitle the workThreeTitle to set
*/
public void setWorkThreeTitle(String workThreeTitle) {
this.workThreeTitle = workThreeTitle;
}
/**
* @return the workThreeContext
*/
public String getWorkThreeContext() {
return workThreeContext;
}
/**
* @param workThreeContext the workThreeContext to set
*/
public void setWorkThreeContext(String workThreeContext) {
this.workThreeContext = workThreeContext;
}
/**
* @return the workOneContext
*/
public String getWorkOneContext() {
return workOneContext;
}
/**
* @param workOneContext the workOneContext to set
*/
public void setWorkOneContext(String workOneContext) {
this.workOneContext = workOneContext;
}
}
2 PageFlowSwitch.jpdl.xml页面流程定义文件
<?xml version="1.0"?>
<pageflow-definition
xmlns="http://jboss.com/products/seam/pageflow"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation=
"http://jboss.com/products/seam/pageflow http://jboss.com/products/seam/pageflow-2.1.xsd"
name="pageflowswitch">
<start-state name="start">
<transition to="page1"/>
</start-state>
<page name="page1" view-id="/pageflow/page1.xhtml">
<redirect/>
<transition name="next" to="toDecision"/>
</page>
<decision name="toDecision" expression="#{pageFlowAction.validInfo}">
<transition name="true" to="page2"/>
<transition name="false" to="page1"-->
- 该日志由 centra 于11年前发表在综合分类下,最后更新于 2013年10月29日.
- 转载请注明: seam pageflow 页面流demo | 学步园 +复制链接