一、概述
![](https://p-blog.csdn.net/images/p_blog_csdn_net/shrekmu/クライアントとサーバの通信.jpg)
二、画面映射
现在使用的画面映射的方法有两种:
- 及时映射:控件的值改变后就直接映射到bean中,bean中的值改变后也及时映射到画面的控件中。
- 延时映射:在需要时将所有的需要的控件值一起映射到bean中,或在需要时将bean中所有的值映射到画面中。
画面配置文件解析
- 映射工具类
- 属性类型
- ValueItem
- bean
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
根据每个Action配置参数Bean和返回Bean。每个属性都有ID和类型,如果控件名省略就对应一个画面中的非控件属性。
2、映射工具类
读取控件的值,并作一些简单的check和类型转换。Check通过Spring的Valang Validator实现,通过check后作类型转换后放入bean中。
3、属性类型
画面的属性分为三种类型,控件属性,frame属性,action属性。
- 控件属性对应一个控件,值保存在控件中。
- Frame属性保存在画面的缓存中,画面销毁的时候会清楚。
- Action属性,在每个action执行完后会将所有的Action属性清除,然后将Action执行的结果中的action属性映射如对应的画面属性中。
在项目设计的前期由于领导的坚持在数据的传输过程中,加入了ValueItem的概念,将每个属性以及其类型封装入ValueItem中,但是由于封装的太薄,反而没有看到优势,总觉得是个累赘。可是在日另一个项目[自治体财务]的开发过程中也发现了类似ValueItem的东西,只不过功能更丰富,觉得是个挺不错的东西。
ValueItem的改进思路:
从画面中直接将String值和控件保存入ValueItem中,然后进行类型验证和Validate。验证失败后将控件的背景色改变。验证通过后以String的形式将值传入服务器端。
5、Bean
Bean中保存了一个ValueItem的集合,现在的系统中是每个Action对应一个bean,Bean中实际存放的是一个HashMap,传输的时候将整个HashMap序列化传入服务端。
三、传输
现在系统中的传输使用了SpringHttpInvoker机能,非常方便在Spring中配置以后可以直接传输Java对象。
1、定义接口
package study.service;
import study.bean.ActionBean;
import study.bean.ResultBean;
/**
* <b>サブシステム名:</b>XXXXXXフレームワーク共通<br>
* <b>機能名称:</b>リモート通信共通機能<br>
* <b>処理説明:</b>リモートサービスインタフェースを定義するクラス。<br>
* <b>変更履歴:</b>2007/07/04 XXXXX 新規<br>
* <br>
*
* @author XXXXX
* @since 1.0.0
* @version 1.0.0 2007/07/04 初版
* <p>
*/
public interface IRemotingService {
/**
* <b>機能概要:</b> ログインアクションの入り口。<br>
* <br>
* <b>処理詳細:</b> <br>
* <ul>
* <li>ログインアクションの入り口
* </ul>
*
* @param bean クライアントのビーン
* @return ResultBean 実行結果
* @since 1.0.0
* <p>
*/
public ResultBean login(ActionBean bean);
/**
* <b>機能概要:</b> ビジネスアクションの入り口。<br>
* <br>
* <b>処理詳細:</b> <br>
* <ul>
* <li>ビジネスアクションの入り口
* </ul>
*
* @param bean クライアントのビーン
* @return ResultBean 実行結果
* @since 1.0.0
* <p>
*/
public ResultBean execute(ActionBean bean);
/**
* <b>機能概要:</b> ログアウトアクションの入り口。<br>
* <br>
* <b>処理詳細:</b> <br>
* <ul>
* <li>ログアウトアクションの入り口
* </ul>
*
* @param bean クライアントのビーン
* @return ResultBean 実行結果
* @since 1.0.0
* <p>
*/
public ResultBean logout(ActionBean bean);
}
2,服务器端配置
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)