this.getsession,this.getHibernateTemplate().getSessionFactory().getCurrentSession(),this.getHibernateTemplate().getSessionFactory().OpenSession

this.getsession实际上是调用了父类中的方法获得session。使用spring管理hibernate的SessionFactory的时候,这个方法会从session池中拿出一session.这样做有可能有问题,就是超session池连接数的时候,spring无法自动的关闭session。 不推荐使用

this.getHibernateTemplate().getSessionFactory().getCurrentSession()从spring管理的sessionFactory中创建一个绑定线程的session.spring会根据该线程的执行情况来自动判断是关闭session还是延迟关闭。这样做可以避免手动的管理实务,同时一个线程最多开启和关闭一次session又可以提高程序的性能。 极力推荐使用这种方法

this.getHibernateTemplate().getSessionFactory().OpenSession。这种方法从spring管理的sessionFactory中创建一个session,此session不是线程绑定的。当执行完一个实务的时候自动关闭session.这种方法不用手动管理实务,但是同一个线程多次的开启和关闭session,浪费系统资源和影响执行效率,正常情况下还是不要用了。

发表在 java | 一条评论

网易邮箱

最简洁、即时、有效的网易邮箱手机版!
网易邮箱在中国的市场占有率自2003年起至今,一直高居全国第一。截至2011年5月,网易邮箱用户总数达3.6亿。

下载:网易邮箱

发表在 android | 48 条评论

四大名著

中国的四大名著是《三国演义》、《水浒传》、《西游记》、《红楼梦》。 四大名著是中国乃至全人类共同拥有的宝贵文化遗产,在整个华人世界中有着深远的影响。研读中国四大名著,是浏览中国古典文学的智能之海,也是阅历中国传统人文、社会、伦理、历史、地理、民俗、心理、处事策略的知识之库。

下载:四大名著

发表在 java | 留下评论

Flex中的文件上传与下载

和传统的JSP一样,在flex中,有的时候也需要实现文件上传和下载的功能,但是在flex里文件的上传和下载的实现相对来说比较复杂,如何实现,请看下面。

    由于flex是一个比较新的技术,在研究的时候,还是按着JSP的方式去尝试,在开始之初,主要有以下几种思路:

    A、利用ftp的方式进行文件的上传和下载,需要利用flex的socket接口。

    B、利用webService的方式来进行文件的上传和下载

    C、利用flex+sevlet+fileupload组件实现文件的上传和下载

    在通过比较后,最后选择了第三种,用Flex+sevlet的方式来完成文件上传和下载的功能,理由如下(与上面的思路相对应):

    A、涉及到了流的操作,实现起来比较复杂,出现错误的几率比较高

    B、关于flex端的可参考的资料比较少,并且还需要启动webservice服务

    C、这个技术比较成熟,从flex2.0开始,在flex端已经可以引用FileReference类了,并且在java端有成熟的组件可以使用,所以最后考虑使用该种方法来处理。

一、文件的上传

    1、Flex端
        A、使用到的类介绍:
            FileReference 类提供了在用户计算机和服务器之间上载和下载文件的方法。 操作系统对话框会提示用户选择要上载的文件或用于下载的位置。它主要能实现一个文件的上传。
            FileReferenceList 类提供了让用户选择一个或多个要上载的文件的方法。 FileReferenceList 对象将用户磁盘上的一组本地文件(一个或多个文件)表示为 FileReference 对象的数组。
        B、使用 FileReferenceList 类 实现多文件上传:
            1) 将该类实例化:var myFileRef = new FileReferenceList(); 
            2) 调用 FileReferenceList.browse() 方法,该方法将打开一个对话框,让用户选择一个或多个要上载的文件:myFileRef.browse(); 
            3) 在成功调用 browse() 方法之后,使用 FileReference 对象数组来填充 FileReferenceList 对象的 fileList 属性。 
                对 fileList 数组中的每个元素调用 FileReference.upload()

        代码如下:

    /** *//**
     * 执行上传操作
     * */    
    private function upLoadFiles():void
    {
        try
        {
            selectFileList.browse(new Array(imageFilter, textFilter));
            selectFileList.addEventListener(Event.SELECT, selectHandler1);
        }
        catch (error:Error) 
        {
            Alert.show(“文件选择出现错误,请选择正确的文件”);
        }
    }
    /** *//**
     * 如果文件被选中,则执行该方法
     * */
    function selectHandler1(event:Event):void
    {
        var request:URLRequest = new URLRequest(“FileUploadServlet”);
        var upLoadFile:FileReference; 
        var upLoadFileList:FileReferenceList = FileReferenceList(event.target);
        var selectedFileArray:Array = upLoadFileList.fileList;
        login =(testPress)(PopUpManager.createPopUp( this, testPress , true));
        for (var i:uint = 0; i < selectedFileArray.length; i++)
        { 
            upLoadFile = FileReference(selectedFileArray[i]);
            upLoadFile.addEventListener(Event.COMPLETE, UpLoadcompleteHandler);
            upLoadFile.addEventListener(ProgressEvent.PROGRESS, progressHandler); 
            try
            {
                upLoadFile.upload(request);
            }
            catch (error:Error)
            {
                Alert.show(error.message.toString());
            }
        }
    }
    function UpLoadcompleteHandler(event:Event):void
    {
         var upLoadFiles:FileReference = FileReference(event.target);
         var fileNames = upLoadFiles.name;
         //Alert.show(‘文件’+fileNames+’上传成功’)
         login.myLabels.text = ’文件’+fileNames+’上传成功’;
    }
     private function progressHandler(e:ProgressEvent):void
  { 
    var proc: uint = e.bytesLoaded / e.bytesTotal * 100;  
    login.bar.setProgress(proc, 100);  
    login.bar.label= ”当前进度: ” + ” ” + proc + ”%”;  
 } 

testPress.mxml

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:TitleWindow xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” width=”528″ height=”236″>
<mx:Script>
    <![CDATA[
        import mx.managers.PopUpManager;
        public function clickMe():void {
            PopUpManager.removePopUp(this);
        }
    ]]>
</mx:Script>
    <mx:ProgressBar id=”bar” labelPlacement=”bottom” themeColor=”#F20D7A”  
minimum=”0″ visible=”true” maximum=”100″ label=”当前进度: 0%”  
direction=”right” mode=”manual” width=”200″ x=”154″ y=”84″/>  
    <mx:Button x=”221″ y=”135″ label=”关闭” click = ”clickMe();”/>
    <mx:Label x=”173″ y=”27″ id=”myLabels” width=”157″/>

</mx:TitleWindow>


    2、JAVA端

     接受Flex端的请求,在JAVA端利用apache的fileupload类库实现上传功能。代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUploadServlet extends HttpServlet
{

    // private String uploadPath = ”D:\\upload\\”;
    private String path = ”file_path.properties”;
    private String skStr = ”";
    private String uploadPath = ”";
    private int maxPostSize = 1000 * 1024 * 1024;

    public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
            IOException
    {
        String filePathaa = this.getServletConfig().getServletContext().getRealPath(“/”);

        Properties p = loadProperties(path);

        uploadPath = p.getProperty(“filepath”);

        res.setContentType(“text/html;charset=UTF-8″);
        req.setCharacterEncoding(“UTF-8″);

        DiskFileItemFactory factory = new DiskFileItemFactory();
        factory.setSizeThreshold(1024*20);

        ServletFileUpload upload = new ServletFileUpload(factory);
        upload.setSizeMax(maxPostSize);
        try
        {
            List fileItems = upload.parseRequest(req);
            Iterator iter = fileItems.iterator();
            while (iter.hasNext())
            {
                FileItem item = (FileItem) iter.next();
                if (!item.isFormField())
                {
                    String name = item.getName();

                    try
                    {
                        File skFile = new File(uploadPath + name);
                        if (skFile.exists())
                        {
                            skFile.delete();
                            item.write(new File(uploadPath + name));

                        }
                        else
                        {
                            item.write(new File(uploadPath + name));
                        }

                    } catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        } catch (FileUploadException e)
        {
            e.printStackTrace();
        }

    }

    public Properties loadProperties(String path) throws IOException
    {

        InputStream in = this.getClass().getResourceAsStream(path);
        //

        Properties p = new Properties();

        p.load(in);
        in.close();
        return p;
    }

}

还要修正web.xml,添加如下内容

<!– For file uploaded –>
   <servlet>
        <servlet-name>FileUploadServlet</servlet-name>
        <servlet-class>FileUploadServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>FileUploadServlet</servlet-name>
        <url-pattern>/FileUploadServlet</url-pattern>
    </servlet-mapping>

二、文件的下载
    

    调用的方法:private function downLoadFiles(urlAdd:String):void
    参数urlAdd就是用户的ip地址,如果使用本地的localhost就会产生安全沙箱问题,因此让用户自己输入自己的ip地址。这样就避免了安全沙箱的问题。如果是本机启动服务,访问地址,需要输入IP,不能用localhost来代替本机的IP地址,否则,还是会出现安全沙箱问题。

     FileReference.download() 方法提示用户提供文件的保存位置并开始从远程 URL 进行下载。直接加载请求路径下载,不需要后台的支持。代码如下:

import com.systex.flex.util.testPress;

import flash.net.FileReferenceList;

import mx.controls.Alert;
import mx.managers.PopUpManager;
    var imageFilter:FileFilter = new FileFilter(“Image Files (*.jpg, *.jpeg, *.gif, *.png)”, ”*.jpg; *.jpeg; *.gif; *.png”);
    var textFilter:FileFilter = new FileFilter(“Text Files (*.txt, *.rtf, *.zip)”, ”*.txt; *.rtf; *.zip”);
    var selectFileList:FileReferenceList = new FileReferenceList();
    var selectedFileArray:Array = new Array();
    var login:testPress = new testPress();
    var downloadURL:URLRequest;
    var DownLoadfile:FileReference; //这是要主要的地方
    //http://XX.XX.XX.XX:8080/upload/main.zip
    private function downLoadFiles(urlAdd:String):void
    {
        downloadURL = new URLRequest(urlAdd);
        DownLoadfile = new FileReference();
        configureListeners(DownLoadfile);
        DownLoadfile.download(downloadURL);
    }
     private function configureListeners(dispatcher:IEventDispatcher):void {
        dispatcher.addEventListener(Event.COMPLETE, completeHandler);

    }
    
    private function completeHandler(event:Event):void {
    mx.controls.Alert.show(“文件下载成功”);
    }

这里的是上面上传代码的上部分

附上测试的MXML

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute”
    >
<mx:Script source=”UpDownLoadFiles.as”/>

    <mx:Canvas width=”100%” height=”100%” x=”10″ y=”170″ fontSize=”15″>
    <mx:VBox width=”100%” horizontalAlign=”center”>
    <mx:TextInput id=”mytextInput”/>
    <mx:Button label=”文件下载” click=”downLoadFiles(‘http://’+mytextInput.text+’:8080/downLoading/2MSN.rar’);”/>
    <mx:Button label=”上传文件” click=”upLoadFiles();”/>
    </mx:VBox>
    </mx:Canvas>
</mx:Application>

发表在 Flex | 留下评论

FLEX实践:表格中添加链接,弹出窗口,复选框,按钮

LovColumn.as

package Class
{
public class LovColumn
{
public var columnName:String;
public var dataField:String;
public var visible:Boolean=true;
public function LovColumn()
{
}

}
}

Module.as

package Class
{
public class Module
{
public var applicationName:String;
public var applicationId:Number;
public function Module()
{
}

}
}

CarVO.as

package Class
{
public class CarVO
{
public var name:String;
public var available:Boolean;
public var age:Number;
public var applicationName:String;
public var applicationId:Number;
public function CarVO()
{
}

}
}

LovComponent.mxml

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:TitleWindow xmlns:mx=”http://www.adobe.com/2006/mxml”
layout=”absolute”
showCloseButton=”true”
close=”cancel()”
borderColor=”#C6D7F5″
themeColor=”#009DFF”
cornerRadius=”10″
creationComplete=”init()” width=”468″ height=”324″>
<mx:Script>
<![CDATA[
import Events.LovEvent;
import Class.CarVO;
import Class.LovColumn;
import mx.collections.ArrayCollection;
import mx.controls.dataGridClasses.DataGridColumn;
import mx.managers.*;
import mx.controls.*;

public var titleName:String;
public var columnArray:ArrayCollection=new ArrayCollection();
public var sourceArray:ArrayCollection=new ArrayCollection();
[Bindable]public var resultObject:Object=new Object();
[Bindable]public var mainApp:Object = null;
private function init():void{

this.title=titleName;

for(var i:Number=0;i<columnArray.length;i++){
var column:DataGridColumn= new DataGridColumn();
column.headerText = columnArray[i].columnName;
column.dataField =columnArray[i].dataField;
column.visible=columnArray[i].visible;
dg.columns=dg.columns.concat(column);
}
dg.dataProvider=sourceArray;
}

private function submit():void{
resultObject=sourceArray[dg.selectedIndex];
mainApp.resultObject=this.resultObject;
dispatchEvent(new LovEvent);
cancel();
}
private function cancel():void{
PopUpManager.removePopUp(this);
}
]]>
</mx:Script>
<mx:DataGrid id=”dg” x=”10″ y=”10″>

</mx:DataGrid>
<mx:Button x=”372″ y=”252″ label=”Submit” click=”submit()”/>

</mx:TitleWindow>

main.mxml

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” layout=”absolute” creationComplete=”init()” backgroundGradientAlphas=”[1.0, 1.0]” backgroundGradientColors=”[#DBFAA6, #EFFDB5]“>
<mx:states>
<mx:State name=”updateState”>
<mx:RemoveChild target=”{dg}”/>
<mx:RemoveChild target=”{button1}”/>
<mx:AddChild position=”lastChild”>
<mx:Canvas x=”325″ y=”88″ width=”493″ height=”328″>
<mx:Label x=”54″ y=”44″ text=”Car Name:”/>
<mx:Label x=”54″ y=”81″ text=”Age:”/>
<mx:Label x=”54″ y=”122″ text=”Availiable:”/>
<mx:TextInput x=”151″ y=”42″ id=”carName”/>
<mx:TextInput x=”151″ y=”79″ id=”carAge”/>
<mx:CheckBox x=”151″ y=”120″ id=”carAvailiable”/>
<mx:Button x=”406″ y=”296″ label=”Update” click=”update()”/>
</mx:Canvas>
</mx:AddChild>
</mx:State>
</mx:states>
<mx:Script>
<![CDATA[
import mx.events.CollectionEvent;
import mx.events.FlexEvent;
import Class.LovColumn;
import myComponent.LovComponent;
import Class.Module;
import Class.CarVO;
import mx.collections.ArrayCollection;
import mx.controls.*;
import mx.managers.*;

[Bindable]public var arr:ArrayCollection=new ArrayCollection();
var columnArray:ArrayCollection=new ArrayCollection();
var sourceArray:ArrayCollection=new ArrayCollection();
[Bindable]public var resultObject:Object=new Object();
private function init():void{
var car1:CarVO=new CarVO();
car1.name=”Ford”;
car1.age=2;
car1.available=false;
car1.applicationName=”AC”;
car1.applicationId=134;
var car2:CarVO=new CarVO();
car2.name=”Buick”;
car2.age=1;
car2.available=true;
car2.applicationName=”AB”;
car2.applicationId=135;
var car3:CarVO=new CarVO();
car3.name=”BMW”;
car3.age=2;
car3.available=true;
car3.applicationName=”AA”;
car3.applicationId=136;
arr.addItem(car1);
arr.addItem(car2);
arr.addItem(car3);

/*init lov data source array*/
var lovColumn:LovColumn=new LovColumn();
lovColumn.columnName=”Application Name”;
lovColumn.dataField=”applicationName”;

var lovColumn2:LovColumn=new LovColumn();
lovColumn2.columnName=”Application Id”;
lovColumn2.dataField=”applicationId”;
lovColumn2.visible=true;
columnArray.addItem(lovColumn);
columnArray.addItem(lovColumn2);

var application1:Module=new Module();
application1.applicationId=136;
application1.applicationName=”BAbb”;
var application2:Module=new Module();
application2.applicationId=137;
application2.applicationName=”BC”;
var application3:Module=new Module();
application3.applicationId=138;
application3.applicationName=”BD”;
sourceArray.addItem(application1);
sourceArray.addItem(application2);
sourceArray.addItem(application3);
arr.addEventListener(CollectionEvent.COLLECTION_CHANGE, show1);
}
private function show():void{
Alert.show(dg.selectedItem.applicationName+”–”+dg.selectedItem.applicationId);
}
public function clickHandler(obj:Object):void{
if(obj.chxBox.selected){
arr.getItemAt(dg.selectedIndex).available=true;
}else{
arr.getItemAt(dg.selectedIndex).available=false;
}
}
public function search():void{
var lovComponent:LovComponent=LovComponent(PopUpManager.createPopUp(this,LovComponent,false));
lovComponent.mainApp = this;
lovComponent.titleName=”Application Search Window”;
lovComponent.columnArray=this.columnArray;
lovComponent.sourceArray=this.sourceArray;
lovComponent.resultObject=this.resultObject;
lovComponent.width=500;
lovComponent.height=400;
lovComponent.addEventListener(“LovEvent”,applicationEditHandler);
PopUpManager.centerPopUp(lovComponent);

}
private function applicationEditHandler(evt:Event):void{
arr[dg.selectedIndex].applicationId=this.resultObject.applicationId;
arr[dg.selectedIndex].applicationName=this.resultObject.applicationName;
arr.refresh();
}
public function show1():void{
//var car:CarVO=arr[dg.selectedIndex];

currentState=”updateState”;
carName.text=arr[dg.selectedIndex].name;
carAge.text=arr[dg.selectedIndex].age.toString();
carAvailiable.selected=arr[dg.selectedIndex].available;

}

public function update():void{
Alert.show(carName.text+” has been updated.”);
}
]]>
</mx:Script>
<mx:DataGrid x=”344″ y=”160″ width=”432″ height=”199″ id=”dg” dataProvider=”{arr}” >
<mx:columns>
<mx:DataGridColumn dataField=”available” headerText=”Available”>
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:CheckBox id=”chxBox” selected=”{data.available}” click=”outerDocument.clickHandler(this);”/>
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText=”Name” dataField=”name”>
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:LinkButton label=”{data.name}” click=”outerDocument.show1();”
textDecoration=”underline” color=”#2066CF” fontWeight=”normal”/>

</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText=”Age” dataField=”age”/>
<mx:DataGridColumn headerText=”Application” dataField=”applicationName” editable=”true”>
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:Label text=”{data.applicationName}” id=”applicationText” width=”60%”/>
<mx:Button click=”outerDocument.search();” width=”40%”
Label=”…” />

</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText=”ApplicationId” dataField=”applicationId” />
</mx:columns>
</mx:DataGrid>
<mx:Button x=”507″ y=”100″ label=”Show Application” click=”show()” id=”button1″/>

</mx:Application>

发表在 Flex | 一条评论

android读SDCard中txt文件中文乱码问题

最近在做一个android小系统,用到了读取SDCard中文本文件(含中文)内容这个功能。刚开始,我就按照一般java读文件的方式写代码,但是,读出来才发现,都是乱码!!!

我就想,是不是读取的方式不对?那换其他的方式试试。然后我就试啊试啊!试了N多方法来读,没想到都是乱码。。。

那我又想,应该是编码转换的问题。我就到网上搜,果然,也碰到了遇到和我一样问题的同胞。

看大部分人的解决方式是:

EncodingUtils.getString(sb.toByteArray(),”GB2312″)这种方式。

但是,对我的代码好像没用!!!

EncodingUtils.getString(sb.toByteArray(“UTF-8″),”UTF-8″)也不行,

EncodingUtils.getString(sb.toByteArray(“UTF-8″),”GB2312″)还是不行。。。

我不知道为什么好多好多帖子都说这样可行,反正我试了,不行。。。

我那个无奈啊!我那个烦躁啊。。。

后来我又在网上搜,搜着搜着,看到了一个讲txt文件编码方式的帖子。。。我突然有所感悟,会不会是txt文件的编码方式android识别不了,而我们转换的时候又没转对呢?

于是我打开一个txt文档,随便写了点儿中文,没有直接保存,而是”文件” — > “另存为”,然后出现了一个对话框,下面有三行:

第一行:文件名

第二行:保存类型

第三行:编码

然后我看到了…………………….默认的编码是ANSI……………………….神呐!

我选择了UTF-8,保存了,导入模拟器,打开程序读文件,哦了,正常了。。。。。。。。。。。

另外,既然txt文件默认编码方式是ANSI,那么读取的时候是不是可以用ANSI来转换成GB2312或者UTF-8呢?个人认为应该可以,但我没试,有兴趣的可以试试。

再另外, http://blog.csdn.net/handsomedylan/archive/2011/01/14/6138400.aspx  这个别人的帖子也是为了解决这个问题的。不过我也没试,不知道可不可行

 

 

try {
AssetManager am = getAssets();
InputStream file = am.open(“s” + url + “.txt”);
//BufferedReader br = new BufferedReader(new InputStreamReader(file));
BufferedReader br = new BufferedReader(new InputStreamReader(file,”gbk”));

String row;
while ((row = br.readLine()) != null) {
txtStr = txtStr + row;
}
} catch (Exception e) {
// TODO: handle exception
}

发表在 android | 留下评论

美女如云V1.2.0

美女合集,实时更新,一键保存,方便设置壁纸.这些青春靓丽、火热性感的女孩来自中国的各行各业。有专业模特、职业演员、公司职员、学生等等。您可以在浏览一张张姿态各异的精美写真的同时,感受到一股来自古老东方所特有的魅力。时而含蓄古典、沉鱼落雁,时而热情奔放、活力俏皮;时而冷艳惊座、光鲜时尚,时而妩媚性感、丰姿卓越。

下载:美女如云

发表在 android | 2 条评论

flex 弹出窗口中的数据如何实时更新

A页面中有个变量 var 随时都在更新,A页面打开弹出窗口B

请问如何让B窗口中的变量 str 也随着改变?

 

A页面:
[Bindable]
public var str:String;  //变量
var b:B = new B();
b.ower = this;
PopUpManager.addPop(b,this,true);
PopUpManager.center(b);
B页面:
(this.ower as A).str = B页面的值

发表在 java | 留下评论

Flex中的弹出窗口

Flex 中有两种弹出窗口:

1. 最简单的警告窗口 你需要先导入Alert类:

import mx.controls.Alert; 然后在想要弹出警告的时候使用: Alert.show(“你确定要退出系统吗?”,“确认”,Alert.YES|Alert.NO,null,logout)

参数说明:

第一个参数是要显示的文本,

第二个参数是窗口的标题,这两个参数是最经常用的。

第三个参数是按钮,默认是两个:YEW 和 NO ,当然你也可以自定义,比如Alert.CANCEL,

第四个参数是父窗口,默认为null。

第五个参数是窗口关闭后调用的函数名,如果你想要在点 击确定之后触发什么事件,就需要定义这个参数。这里我要调用logout,请注意,不要在这里写logout()。(没有括号)logout 函数如下: private function logout(event:CloseEvent):void { if(event.detail == Alert.YES) { // 具体操作 } } 因为这个函数是触发的,所以参数是一个CloseEvent 。“event.detail == Alert.YES” 这行代码判断点击的是不是确定按钮。CloseEvent 中的 detail 属性专门判断点击了哪个按钮,这样就可以用户的点击控制代码。 简单的Alert 用法就是这样,更多相关信息请看帮助文档。

2.弹出窗口 这个就比较强大了,需要使用一个类,那就是PopUpManager,同样,使用前你需要先导入: import mx.managers.PopUpManager; 然后你就要创建一个Compoment 作为弹出窗口,这个没什么特别的,创建一个普通的Compoment 就行,这里我创建了一个文件叫做PopWindow ,就是一个简单的Canvas,里面就放一个图片。代码如下: PopWindow.mxml:

<?xml version=”1.0″ encoding=”utf-8″?>
<mx:Canvas xmlns:mx=”http://www.adobe.com/2006/mxml” width=”100″ height=”100″>
<mx:Script>
<![CDATA[
import mx.managers.PopUpManager;
]]>
</mx:Script>
<mx:Image x=”0″ y=”0″ source=”assets/face.PNG” click=”PopUpManager.removePopUp(this)” width=”90″ height=”82″/>

</mx:Canvas>

import mx.managers.PopUpManager;
]]> 其中 removePopUp 是 PopUpManager 的一个方法,就是移除当前弹出的窗口,这里我设置了点击图片的时候就移除弹出窗口。接下来我们在 主程序中创建并弹出窗口:

var pop : PopWindow= PopWindow(PopUpManager.createPopUp(this,PopWindow,true));

这就完成了,这个pop 是一个PopWindow(就是刚才创建的Component的文件名)类型的变量,由于PopUpManager 的 createPopUp 返回的 是一个 IFlexDisplayObject,你需要将其强制转换成为PopWindow类型才能赋值给 pop 变量。下面详细说明一下 createPopUp 的这几个参 数: 第一个参数是弹出窗口的父窗体,这个相信大家都明白。 第二个参数是弹出窗口的类名,也就是组件的文件名,在Flex中一个MXML文件也对应一个类。PopUpManager是根据这个类来创建弹出对话框 。 第三个参数是模态标记。如果是 true ,就创建一个模态对话框;否则创建的就是一个非模态的对话框。 PopUpManager 还有一个参数,不过不常用,具体请参考帮助文档。 然后你就可以对弹出对话框操作了,想要移除就用 removePopUp(pop)。另外,如果是非模态的,可能在点击程序其它部分的时候窗口就不见 了,但是它并没有移除,怎么让它出来呢?这个时候就需要 PopUpManager 的另外一个方法: bringToFront(),这个方法可以把窗口放到最 前。你可以控制,让程序第一次的时候是创建对话框,以后就是把窗口放到最前。

发表在 Flex | 留下评论

MyBatis入门实例

今天刚听说iBATIS改名为MyBatis,实际上就是iBATIS 3.0.1。以前都是用hibernate或者JPA,同时听说iBATIS 3与iBATIS 2 相比,变化挺大的,于是今天花了点时间学习了一下,做了个小例子。

 

准备工作:建立相应的数据库,表,添加一条记录用于测试。

 

第一步当然是建立项目,导入jar包,导入mybatis-3.0.1.jar,和mysql的jdbc驱动。

 

第二步 新建一个类User,包含主键,用户名,密码等属性

 

Java代码 
package cn.dcr.mybatis.entity;

public class User {
	private Long id;
	private String userName;
	private String password;
	private int age;

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

}

第三步,写sql映射的xml文件

 

Xml代码 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">  

<mapper namespace="cn.dcr.mybatis.entity.UserMapper">
    <select id="selectOne" parameterType="long" resultType="cn.dcr.mybatis.entity.User">
        select * from user where id = #{id}
    </select>
</mapper>

 

第四步,写MyBatis配置文件,configuration.xml

 

Xml代码 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
	PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
	"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC"/>
			<dataSource type="POOLED">
				<property name="driver" value="com.mysql.jdbc.Driver"/>
				<property name="url" value="jdbc:mysql://localhost:3306/test"/>
				<property name="username" value="root"/>
				<property name="password" value="root"/>
			</dataSource>
		</environment>
	</environments>
	<mappers>
		<mapper resource="cn/dcr/mybatis/entity/User.xml"/>
	</mappers>
</configuration>

 

第五步,编写Util类,用于初始化SqlSessionFactory

 

Java代码 
package cn.dcr.mybatis.util;

import java.io.IOException;
import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class Util {

	private static SqlSessionFactory sqlSessionFactory = null;

	static {
		String resource = "configuration.xml"; 

		Reader reader = null;
		try {
			reader = Resources.getResourceAsReader(resource);
		} catch (IOException e) {
			e.printStackTrace();
		}		

		sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
	}

	public static SqlSessionFactory getSqlSessionFactory(){
		return sqlSessionFactory;
	}
}

 

 

第六步,编写Dao类,用于封装增删改查等操作(为简单起见,这个类只有一个根据id查询出对应的User对象的方法)

 

Java代码 
package cn.dcr.mybatis.dao;

import org.apache.ibatis.session.SqlSession;

import cn.dcr.mybatis.entity.User;
import cn.dcr.mybatis.util.Util;

public class UserDao {
	public User query(Long id){
		SqlSession session = Util.getSqlSessionFactory().openSession();
		User user = null;
		try{
			 user = (User)session.selectOne("cn.dcr.mybatis.entity.UserMapper.selectOne", id);
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			session.close();
		}
		return user;
	}
}

 

第七步,编写测试类

 

Java代码 
package cn.dcr.mybatis.test;

import cn.dcr.mybatis.dao.UserDao;
import cn.dcr.mybatis.entity.User;

public class UserTest {
	public static void main(String[] args){
		UserDao userDao = new UserDao();
		User user = userDao.query(1L);

		System.out.println(user.getId());
		System.out.println(user.getUserName());
		System.out.println(user.getPassword());
		System.out.println(user.getAge());
	}
}

 

 

运行一下,能够成功查询出对应的记录。

发表在 MyBatis | 一条评论