这里项目主要是以java web为例,在传统B/S项目中使用flex主要就是其通信方式,下面介绍几种思路:
第一种是HttpService方式,实例开路:helloworld太单调,以一个完整的登陆为例吧。
首先是Flex客户端代码:
还有些配置文件就不写了,这里传的是Sting,如果是复杂对象,如存放Map的List,可以用XML传输,flex对XML的支持是相当强大啊。
第一种是HttpService方式,实例开路:helloworld太单调,以一个完整的登陆为例吧。
首先是Flex客户端代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
backgroundGradientAlphas="[1.0, 1.0]"
backgroundGradientColors="[#11E3E6, #EBF9F8]">
//ActionScpipt代码
<mx:Script>
<![CDATA[
import mx.rpc.events.FaultEvent;
import mx.rpc.events.ResultEvent;
import mx.controls.Alert;
//登陆成功进入的方法
public function handlePlain(event:ResultEvent):void{
var str:String = event.result as String;//获得服务端返回结果
success.text=str;
}
//登陆失败触发的方法
public function handleFault(event:FaultEvent):void{
Alert.show(event.fault.faultString, "Error");
}
//前台验证(有了下面的flex自带验证框架,这里显得多余。。。。。。)
public function login():void{
if(""==username.text){
trace(username.text.toString());//trace()方法调试时很有用,类似System.out.println()
nameinfo.text="用户名不能为空";
}else
if(""==password.text){
passwordinfo.text="密码不能为空";
}else{
testHttp.send();
}
}
]]>
</mx:Script>
//这里已post方式提交,至于传递参数主要有两种方式,第一种是URL后面加参数,如*.do?param1=**,个人倾向于第二种,就是下面这种,使用<mx:request>,showBusyCursor="true"表示等待时鼠标形状为等待状态
<mx:HTTPService id="testHttp" method="pOST" url="http://localhost:8888/szsygl/login.do" showBusyCursor="true" result="handlePlain(event);" fault="handleFault(event);" >
<mx:request xmlns="">
<username>
{username.text}
</username>
<password>
{password.text}
</password>
</mx:request>
</mx:HTTPService>
//Flex验证框架,很强大,还有PhoneNumberValidator,EmailValidator等等
<mx:Validator id="pnV" source="{username}" property="text"
trigger="{btn}" triggerEvent="click"
requiredFieldError="用户名必填" />
<mx:Validator id="checkpassword" source="{password}" property="text"
trigger="{btn}" triggerEvent="click"
requiredFieldError="密码必填" />
//下面是组件,这里是随意界面拖拉排的版,不规范,flex的css有待提高,layout有三种属性,分别代表横向纵向及绝对定位,这里是绝对定位,panel组件给人感觉类似于html的div
<mx:panel x="203.5" y="93" width="761" height="381" layout="absolute">
<mx:Button x="324" y="169" id="btn" label="登陆" width="54" fontSize="12" click="login()" />
<mx:TextInput x="324" y="106" id="password" fontSize="12" displayAsPassword="true"/>
<mx:Button x="432" y="169" label="重置" fontSize="12"/>
<mx:TextInput x="324" y="49" id="username" fontSize="12"/>
<mx:Text x="239" y="48" text="用户名:" width="77" fontSize="16" height="49"/>
<mx:Text x="239" y="105" text="密码:" fontSize="16" />
<mx:Text x="492" y="49" text="" id="nameinfo" width="156" height="24" fontSize="14" color="#F50F0A"/>
<mx:Text x="492" y="106" text="" id="passwordinfo" width="156" height="24" fontSize="14" color="#F50F0A"/>
<mx:Text x="324" y="10" id="success" text="" width="160" height="31" fontSize="15" color="#F50F0A"/>
</mx:panel>
</mx:Application>
客户端代码就这么多了,很简单的几个组件及函数
服务端代码,简单起见,所有业务逻辑就在控制层完成吧
package cn.tohot.szsygl.flextest;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import cn.tohot.szsygl.common.BaseDao;
import cn.tohot.util.security.SecurityUtils;
/**
*flex测试类
* @version 1.0 2009-1-14
* @author zhanglu
* @since JDK 1.5.0_8
*/
public class FlexTestServlet extends HttpServlet{
/**
*
*/
private static final long serialVersionUID = 1L;
private static final String LOAD_YH_DM = "from Yhxx where yhdm=?";
private static final String LOAD_YH_MM = "from Yhxx where yhdm=? and yhmm=?";
private BaseDao dao;
//从spring工厂里面得到初始化数据库操作接口
@Override
public void init() throws ServletException {
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(getServletContext());
dao = (BaseDao)ctx.getBean("dao");
}
public void doGet(HttpServletRequest request,HttpServletResponse response){
}
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
String name = request.getParameter("username");
String password = request.getParameter("password");
response.setCharacterEncoding("utf-8");
printWriter writer = response.getWriter();
if(null==name||"".equals(name)||!checkname(name)){
writer.write("用户名不正确");
}else if(null==password||"".equals(password)||!checkpassword(name,password)){
writer.write("密码不正确");
}else{
writer.write("成功登陆");
}
writer.flush();
writer.close();
}
//验证用户名
private boolean checkname(String name){
List<?> list = dao.getHibernateTemplate().find(LOAD_YH_DM, name);
if(list.isEmpty()){
return false;
}else{
return true;
}
}
//验证密码
private boolean checkpassword(String name,String password){
Object[] values= {name,SecurityUtils.md5Digest(password)};
List<?> list = dao.getHibernateTemplate().find(LOAD_YH_MM, values);
if(list.isEmpty()){
return false;
}else{
return true;
}
}
}
还有些配置文件就不写了,这里传的是Sting,如果是复杂对象,如存放Map的List,可以用XML传输,flex对XML的支持是相当强大啊。