本篇的主要包括两部分内容。 1. 服务器端的文件结构及基础代码。 2. 实现员工信息的保存。
知识点:
1. 与java端交互
2. flex上传图像
3. 自定义事件
4. 验证表单
5. 基本的动画效果
一、 服务器端的文件结构及基础代码
1. 文件结构说明。
2. web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>flex.messaging.HttpFlexSession</listener-class>
</listener>
<servlet>
<servlet-name>MessageBrokerServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>MessageBrokerServlet</servlet-name>
<url-pattern>/messagebroker/*</url-pattern>
</servlet-mapping>
3. 定义员工持久化对象Employee,需要特别留意的是headtraid采用了byte[]类型,数据库中存放的类型为longblob。
/**
* 头像
*/
private byte[] headtraid;
4. 编写EmployeeManager,使之继承SuperEntityManager,这样便具备了增删改的功能,写一个查找方法findEmployees。
/**
* 员工信息管理
* @author 黄连忠
*/
@Service("employeeManager")
@Component
@RemotingDestination(channels={"my-amf","my-secure-amf"})
public class EmployeeManager extends SuperEntityManager {
/**
* 根据查询条件查询出员工
* @param condition
* @return
*/
@SuppressWarnings("unchecked")
public List<Employee> findEmployees(String condition) {
Criteria c = superDao.createCriteria(Employee.class);
c.add(Restrictions.eq("deleted", false));
if (StringUtil.isNotNull(condition)){
c.add(Restrictions.like("name", "%"+condition+"%"));
}
c.addOrder(Order.asc("name"));
return c.list();
}
}
二、Flex端
1. 首先用Po2FlexVoUtil工具类生成对应SuperEntity.as和Employee.as,放到对应的文件夹下。
2. 切换到Flash透视图,新建一个名为views.personnel的包。在其在下面建一个名为BasicInfo的NavigatorContent组件。具体内容请参照附件。
3. 来看看泰头像处理这部分。首先定义一个id为headtrait的Image,将其source绑定到类型为ByteArray的headtraid,当图像传到浏览器后便会将其显示为图片。
<mx:Image id="headtrait" source="{employee.headtraid}" width="150" height="155"/>
<s:Button label="选择头像" id="btnSelectImage" click="selectImage()"/>
private function selectImage():void {
var arr:Array = [];
arr.push(new FileFilter("图像", ".gif;*.jpeg;*.jpg;*.png"));
fileReference.browse(arr);
}
private function fileReference_select(evt:Event):void {
fileReference.load();
}
private function fileReference_complete(evt:Event):void {
headtrait.source = fileReference.data;
}
在非可视元素中定义一个<net:FileReference id="fileReference" select="fileReference_select(event);" complete="fileReference_complete(event);" />
4. 验证表单。将FormItem中的required属性置为true, 使其在界面中显示红色的*。在非可视元素中定义一个StringValidator。并且在整个组件的creationComplete事件中,将validate_ename加入到事先定义的validatorArr数组当中(/commonAs/validate.as文件)。 在需要验证的时候调用validateForm()函数即可。
<mx:StringValidator id="validate_ename" source="{ename}" property="text" required="true" requiredFieldError="员工姓名不能为空!" />
if (validateForm()){
Alert.show("您确定要执行更新操作吗?", "提示信息", Alert.YES|Alert.NO, this, function(evt:CloseEvent):void{
if (evt.detail==Alert.YES){
}
});
}
5. 调用java端方法。在非可视元素中声明一个RemoteObject.
<s:RemoteObject id="employeeManager" destination="employeeManager"
showBusyCursor="true" fault="faultHandler(event)">
<s:method name="add" result="onAdd(event)"/>
<s:method name="update" result="onUpdate(event)"/>
</s:RemoteObject>
直接使用java端的方法即可。
protected function doAdd(event:MouseEvent):void{
if (validateForm()){
Alert.show("您确定要添加员工吗?", "提示信息", Alert.YES|Alert.NO, this, function(evt:CloseEvent):void{
if (evt.detail==Alert.YES){
var tempEmployee:Employee = new Employee();
tempEmployee.name = ename.text;
tempEmployee.gender = rgGender.selectedValue as String;
tempEmployee.birthday = birthday.selectedDate;
tempEmployee.nativeplace = nativeplace.text;
tempEmployee.joinDate = joinDate.selectedDate;
tempEmployee.leaveDate = leaveDate.selectedDate;
tempEmployee.headtraid = headtrait.source as ByteArray;
tempEmployee.descn = descn.text;
tempEmployee.htmlDescn = descn.htmlText;
employeeManager.add(tempEmployee);
}
});
}
}
6. 自定义事件。新建一个名为EmployeeThumbEvent的自定义Event,放在lzh.icecream.personnel.event包下面,供以后用。具体内容请参照附件。
protected function onAdd(event:ResultEvent):void{
employee = event.result as Employee;
dispatchEvent(new EmployeeThumbEvent(EmployeeThumbEvent.ADD_EMPLOYEE, employee));
}
<fx:Metadata>
[Event(name="addEmployee", type="lzh.icecream.personnel.event.EmployeeThumbEvent")]
[Event(name="updateEmployee", type="lzh.icecream.personnel.event.EmployeeThumbEvent")]
</fx:Metadata>
7. 基本的动画效果。在employee值发生变化时,让头像围绕Y轴转360度。
public function set employee(employee:Employee):void{
this._employee = ObjectUtil.copy(employee) as Employee;
var rotate3D:Rotate3D = new Rotate3D();
rotate3D.angleXFrom = 0; rotate3D.angleXTo = 0;
rotate3D.angleYFrom = 0; rotate3D.angleYTo = 360;
rotate3D.angleZFrom = 0; rotate3D.angleZTo = 0;
rotate3D.autoCenterTransform = true;
rotate3D.autoCenterProjection = true;
rotate3D.target = headtrait;
rotate3D.play();
}
8. 对主应用程序icecream.mxml做简单的修改。加入自定义组件<personnel:BasicInfo />。创建好数据库之后,启动tomcat,试着添加一条数据,然后到数据库看看。
分享到:
相关推荐
【标题】:“仿照Flexstroe3写的一个员工管理应用(二)” 在这个主题中,我们探讨的是如何基于Flexstore3的设计模式构建一个员工管理应用的第二个部分。Flexstore3是一个用于数据存储和管理的框架,它在JavaScript...
【标题】"仿照Flexstroe3写的一个员工管理应用 (四)" 涉及的知识点主要集中在软件开发和编程领域,特别是针对Flexstore3的仿写过程,这是一个用于数据存储和管理的应用。Flexstore3是基于Flex技术构建的,而Flex是...
【描述】: "仿照Windows记事本的小程序是一个适合初学者实践的项目,它将帮助你掌握基础编程技巧。在这个过程中,你会遇到如何创建一个简单的图形用户界面(GUI),处理用户输入,读写文件,以及实现文本编辑功能的...
在“仿照内核makefile写的一个测试小工程”中,我们可以找到一些关键的元素和概念: 1. **目标与依赖关系**:在Makefile中,每个目标(target)都有一个或多个依赖文件(dependency)。当依赖文件改变时,Makefile...
本项目“仿照淘宝做的一个ASP电子商务网站”旨在提供一个基于B2B(Business-to-Business)模式的在线交易平台。在ASP(Active Server Pages)技术的支持下,该网站实现了诸如商品浏览、购物车、订单处理、用户管理等...
仿照wireshark写的一个网络流量监测应用,前端用的pyqt,界面还蛮好看的,具体功能包括抓包,_Network-monitoring
仿照MyBatis手写一个持久层框架对应源码,适用于文档学习下载使用
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 软件开发设计:应用...
3. **删除应用**:删除操作通常涉及一个移除元素的过程。在Vue中,可以使用`v-if`或`v-show`指令根据数据模型的状态决定某个应用组件是否显示。当用户选择删除某个应用时,对应的模型数据会被移除,从而导致该应用...
仿照知乎做的一个Java web项目,是一个sns+资讯的web应用。使用SpringBoot+Mybatis+velocity开发。数据库使用了redis和mysql,同时加入了异步消息等进阶功能,同时使用python爬虫进行数据填充。 适合学习/练手、毕业...
【标题】"仿照微信界面写的app"是一个项目,旨在创建一个与微信用户界面高度相似的应用程序。这个项目的核心目标是复制微信的90%的UI设计,为开发者提供一个研究和学习移动应用界面设计的实例。 【描述】中提到,这...
分为三个级别:管理员,普通员工,公司领导,数据库放在App_Data下,附加即可,可在VS2005和VS2008下运行,数据库用的SQl+2005,文档很详细,可以用作毕业设计,也可以仿照本系统自己动手开发一个,如此详细的文档,...
3. **应用详细信息**:为用户提供每个应用程序的详细信息,例如进程的启动时间、文件路径、关联的用户账户等。 4. **启动管理**:允许用户查看和管理启动时自动运行的程序,可以禁用不需要的启动项,以提高系统启动...
使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10.zip 使用c++基于Qt框架开发的任务管理器,UI仿照win10....
在Android开发中,"三级联动"通常指的是在一个界面中,有三个互相关联的下拉选择框,它们的数据层级关系通常是省-市-区,比如在创建收货地址时的省份、城市和区域的选择。京东收货地址的实现方式是用户在选择一个省...
直播课堂管理系统是一个基于MySQL数据库和JavaWeb技术构建的教育平台,用于实现在线教学的管理和交互。这个系统的主要功能包括课程管理、用户管理、查询操作、数据的增删改查等,旨在提供一个高效、便捷的教学环境。...
c++版本libevent,仿照libevent写的一个服务器框架,libevent的基本功能已实现,暂时不能在windows平台上使用,定时器是纯粹的timer wheel方式,与libevent的小根堆不一样,而且最大定时时间是固定的,暂时不支持...
总之,"仿照github实现客户端"项目展示了如何在Android平台上使用MVP模式和各种开源库来构建一个功能丰富的第三方GitHub客户端应用,涉及到网络请求、数据处理、UI设计等多个方面的技术知识。开发者在实现过程中不仅...
【标题】"仿照知乎做的一个Java web项目"与【描述】中的"python项目"存在不一致,这可能是因为信息提供有误。但从标题来看,我们可以聚焦于Java Web项目的相关知识点。 Java Web项目通常指的是使用Java语言开发的、...