1.
配置文件说明:
1.1 web.xml
webflow基于spring框架,此处使用一般spring与struts整合方式,引入spring框架
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/webflow-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
1.2 struts-config.xml
formbean使用SpringBindingActionForm
<form-bean name="actionForm"
type="org.springframework.web.struts.SpringBindingActionForm"/>
global-forwards提供给webflow跳转关系
action-mapping使用保证struts说明,类型使用FlowAction
<action path="/flowAction"
name="actionForm"
scope="request"
type="org.springframework.webflow.executor.struts.FlowAction"/>
1.3 webflow-context.xml(spring配置文件)
<bean id="actionForm" class="...Action"
/>指定action的class文件
注册webflow
<flow:executor id="flowExecutor"
registry-ref="flowRegistry"/>
<!-- Creates the registry of flow definitions for this application
-->
<flow:registry id="flowRegistry">
<flow:location path="/WEB-INF/gateway.xml"/>
</flow:registry>
1.4 gateway.xml(webflow配置文件)
流程
<start-state idref="xxx" /> <!--
表明webflow的开始-->
<view-state id="" view=""><!-- view="" 指向struts配置文件global-forwad
-->
<render-actions>
<action bean="tvgwformAction"
method="setupForm" /> <!-- setupForm对应action中构造方法-->
</render-actions>
<transition on="pay" to="processChooseFormSubmit" />
<!-- on="XXX" 接收页面提交的_eventId_XXX-->
<transition on="cancel" to="cancel"
/> <!-- to="XXX"
需对应跳转view-state或action-state的id-->
</view-state>
<action-state id="processChooseFormSubmit">
<action bean="tvgwformAction" method="bindAndValidate"
/> <!-- bindAndValidate对应strust的validator-->
<transition on="success" to="queryAccount" />
<transition on="error" to="simupay"
/> <!-- success&error
对应action方法的result返回值-->
</action-state>
<action-state id="queryAccount">
<action bean="tvgwformAction" method="queryAccount"
/> <!--method对应action方法 -->
<transition on="success" to="gwForm" />
<transition on="error" to="error" />
</action-state>
<end-state id="resultForm" view="result" />
<!-- 表明webflow的结束-->
2.
action类说明
2.1 action类继承自org.springframework.webflow.action.FormAction
2.2 构造方法需要设置以下参数
public TvGatewayFormAction(){
setFormObjectName("tvGateway");
//设置使用formbean的名字
setFormObjectClass(TvGateway.class);
//设置使用formbean的类
setFormObjectScope(ScopeType.FLOW);
//设置生命周期
setValidator(new TvGatewayValidator());
//设置验证方法
}
!注意:在验证方法中提供supports方法,注入formBean类
public boolean supports(Class clazz) {
return
clazz.equals(BirthDate.class);
}
2.3 action向页面传递对象
可以使用context.getRequestScope().put(...)和context.getRequestScope().put(...)两种(实现struts
request.setAttribute功能)
使用context.getRequestScope().put(...),如果对象传递目的地是end-state,页面可以接收到对象的值,如果传递目的地是view-state则不能接收到
原因:在swf
1.0中缺省alwaysRedirectOnPause开启,意味着,view在重定向之后总是会被收回,也就是说,request会在下一个请求到来时被刷新;
因此,使用context.getRequestScope().put(String, object)代替
2.4 view-state to action-state
为保证action中getFormObject(context)可取得页面提交数据,在webflow配置文件中每次从view-state跳转到action-state都必须
先调用validator的bindAndValidate,主要目的是使用validator中的support将formBean对象“注入”,从而保证formBean对象在整个flow流程中的一致性。
3.
Jsp页面说明
3.1 页面显示action传递的对象可以采用<bean:write name.../> 或 ${XXX.xx }两种方法
3.2 webflow响应页面跳转是根据页面提交的_eventId_XXX对应的XXX确定的,
由于机顶盒界面不使用链接或点击事件做提交,使用javascript响应键盘事件,用js函数处理提交,为区分不同事件产生不同跳转,采用如下方法:
在javascript中创建html页面元素的方法
在页面设置一个不可见元素
<span id="_eventId"/>
在javascript脚本中添加需要创建的元素
document.getElementById("_eventId").innerHTML=<...>;
<...>可如所示 <input type=\"hidden\" name=\"_eventId_cancel\"
value=\"Abandon\"/>(临时生成不同_eventId_XXX)
相关文章
- 12-19函数式创建对象交给Spring管理
- 12-19spring-boot集成mybatis
- 12-19Spring加载resource时classpath*:与classpath:的区别
- 12-19spring boot -junit单元测试方法示例
- 12-19Spring Boot 中使用 thrift 入门
- 12-19在IDEA中对Spring Boot项目进行远程debug调试
- 12-19消息驱动的微服务 - Spring Cloud Alibaba RocketMQ
- 12-19我的spring-boot-study之mybatis的应用
- 12-19Spring-Security
- 12-19Spring-Study