冲上云霄

zhaosoft

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  35 随笔 :: 0 文章 :: 6 评论 :: 0 Trackbacks

2008年10月29日 #

利用blog更好的学习
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/06/2254859.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(78) | 评论 (1)编辑 收藏

Struts+hibernate实现分页程序
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/17/2301771.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(125) | 评论 (0)编辑 收藏

Spring与struts整合开发,实现登陆程序
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/20/2308495.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(56) | 评论 (0)编辑 收藏

Struts整合spring方法(二)
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/20/2308589.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(60) | 评论 (0)编辑 收藏

Struts整合spring方法(三):Spring提供了DelegatingActionProxy类,用来代替struts中的动作,负责在Spring配置文档中查找对应的动作映射,从而把Struts的Action与Spring分离,并把struts的动作置于Spring框架的控制下。
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/20/2309173.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(67) | 评论 (0)编辑 收藏

cookie是什么东西?
文章来源:http://blog.csdn.net/zxl315/archive/2008/04/20/2309872.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(86) | 评论 (0)编辑 收藏

  每学习一个框架,我们都免不了要学习一些关于的配置文件,struts2也不例外,下面我就讲一下struts2中几个主要的配置文件。   1) struts-default.xml   这个文件是struts2框架默认加载的配置文件。它定义struts2一些核心的bean和拦截器。      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd">  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"   "http://struts.apache.org/dtds/struts-2.0.dtd">   
文章来源:http://blog.csdn.net/zxl315/archive/2008/06/11/2534972.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(302) | 评论 (0)编辑 收藏

导读:   自然而然的想法就是在 Action 中声明变量 File upload 和 String desc,请求提交到这个 Action 后,在 execute() 方法中就能直接使用 upload 和 desc 了,它们已被 Struts2 框架(org.apache.struts2.interceptor.FileUploadInterceptor监听器) 赋上了相应的值了。   因为维护的是一个古老的项目,请求都是直接提交给 jsp。在这个项目中套上了 Struts2 已是不易了。原来项目是用的 jspSmartUpload 来处理上传文件的,Struts2 一上 jspSmartUpload 便不能正常工作了,因为 Struts2 的过滤器 org.apache.struts2.dispatcher.FilterDispatcher拦截的是所有的请求,在交把请求交给 jspSmartUpload 之前请求 request 就已被处理过了,即使是把 struts2-core-2.x.x.jar 中的 struts-default.xmlfileUpload 取消了也是
文章来源:http://blog.csdn.net/zxl315/archive/2008/06/17/2558591.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(124) | 评论 (0)编辑 收藏

导读:    ......      如果没有指定 namespace 属性,默认 namespace 是 ""。使用 namespace 可以方便于按不同目的规划对应用的访问规则。比如不同 namespace 下配置了不同的拦截器就可以实现权限的控制,如 "/secure" 下已登陆用户才能访问,"/public" 下可公开访问的。   配置了 namespace 直接就是反应在访问 URL 上,例如 namespace="/secure"? name="test" 的 action   
文章来源:http://blog.csdn.net/zxl315/archive/2008/06/17/2558647.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(236) | 评论 (0)编辑 收藏


要在jsp中使用Struts2的标志,先要指明标志的引入。通过jsp的代码的顶部加入以下的代码:
<%@
文章来源:http://blog.csdn.net/zxl315/archive/2008/09/05/2886456.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(86) | 评论 (0)编辑 收藏

struts2动态方法调用
  struts2中无需配置就可以直接调用Action中非execute方法的方式,就是试用struts2的动态动态方法调用。
动态方法调用(Dynamic method Invoc)是在action的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为
  actionName!methodname.action
 例如我们的配置如下:



当请求/login!query.action时,将调用LoginAction的query()方法,当请求/login!save.action时,将调用LoginAction的save()方法。
strust2提供了一种配置,用于禁用DMI,你可以在struts.xml文件中,使用constant元素将struts.enable.Dyn
文章来源:http://blog.csdn.net/zxl315/archive/2008/11/08/3253823.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(145) | 评论 (0)编辑 收藏

使用s:tree和s:treenode标签生成静态树

 showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">







文章来源:http://blog.csdn.net/zxl315/archive/2008/11/08/3253828.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(102) | 评论 (0)编辑 收藏

下载eclipse的插件包:FB3_WWEJ_Plugin.exe
地址:

点击安装,完成。假设安装目录为:D:\Program Files\Adobe\Flex Builder 3 Plug-in
按提示设置eclipse:
1.Help -> Sofeware Updates -> Product Configuration -> Add an Extension Location。
选择目录:D:\Program Files\Adobe\Flex Builder 3 Plug-in\eclipse
环境配置完成!

接下来可以运行第一个hello world程序了
文章来源:http://blog.csdn.net/zxl315/archive/2008/11/16/3312984.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(363) | 评论 (0)编辑 收藏

使用拦截器注解
文章来源:http://blog.csdn.net/zxl315/archive/2008/11/21/3343829.aspx
posted @ 2008-11-25 15:39 zhaosoft 阅读(207) | 评论 (0)编辑 收藏

hibernate继承映射:

domain类:
Employee.java

package com.zhaosoft.domain;

public class Employee {

 private int id;
 private String name;
 private Department depart;

 public int getId() {
  return id;

 }

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

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public Department getDepart() {
  return depart;
 }

 public void setDepart(Department depart) {
  this.depart = depart;
 }

}

两个子类:
sales.java

package com.zhaosoft.domain;

public class Sales extends Employee{

 private int sell;//销售额

 public int getSell() {
  return sell;
 }

 public void setSell(int sell) {
  this.sell = sell;
 }
}
Skiller.java

package com.zhaosoft.domain;

public class Skiller extends Employee{
 private String skill;

 public String getSkill() {
  return skill;
 }

 public void setSkill(String skill) {
  this.skill = skill;
 }
 

}

映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
 "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.zhaosoft.domain">
     <!-- 当discriminator-value值为0时,为普通员工 -->
 <class name="Employee" discriminator-value="0">  
  <id name="id">
      <!-- 表示主键为自动增长 -->
   <generator class="native"/>
  </id>
  <!-- 鉴别器,区分是那一种子类 -->
 <discriminator column="type" type="int"/>
 <property name="name" type="string"/>
 <many-to-one name="depart" class="Department" column="depart_id"></many-to-one>
 <!-- 当为1时,为技术人员 -->
 <subclass name="Skiller" discriminator-value="1">
    <property name="skill"></property>
 </subclass>
 <!-- 当为2时为销售人员 -->
 <subclass name="Sales" discriminator-value="2">
   <property name="sell"></property>
 </subclass>
 </class>
</hibernate-mapping>
测试:

package com.zhaosoft.test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.zhaosoft.domain.Department;
import com.zhaosoft.domain.Employee;
import com.zhaosoft.domain.Sales;
import com.zhaosoft.domain.Skiller;
import com.zhaosoft.hibernate.HibernateUtil;

public class Many2One {
 public static void main(String[] args) {
  add();
  //queryDepartment(1);
  //queryEmployee(1);
 }

 public static void queryDepartment(int id) {
  Session s = HibernateUtil.getSession();
  try {
   Transaction t = s.beginTransaction();
   t.begin();
   Department de = (Department) s.get(Department.class, 1);
   
   t.commit();
   Hibernate.initialize(de.getEmps());
   System.out.println(de.getName());
   Set<Employee> set=de.getEmps();   //加载数据
   Iterator<Employee> it=set.iterator();
   while(it.hasNext()){
   Employee employee= it.next();
   System.out.println(employee.getName());
   }
   
  } catch (Exception e) {

  } finally {
   if (s != null) {
    s.close();
   }
  }

 }

 public static Employee queryEmployee(int id) {

  Session s = null;
  Transaction tx=null;
  try {

   s=HibernateUtil.getSession();
   tx=s.beginTransaction();
   Employee emp=(Employee)s.get(Employee.class,id);
   //Hibernate.initialize(emp.getDepart());
   tx.commit();
   return emp;
  } finally {
   if (s != null) {
    s.close();
   }
  }

 }

 public static void add() {
  Session s = null;
  Transaction t=null;
  try {
   s=HibernateUtil.getSession();
   t = s.beginTransaction();
   t.begin();
   Department d = new Department();
   d.setName("销售部");

   Employee employee1 = new Employee();
   employee1.setName("小三");
   employee1.setDepart(d);

   Skiller employee2 = new Skiller();
   employee2.setName("李斯");
   employee2.setSkill("skill");
   employee2.setDepart(d);
   
   Sales employee3 = new Sales();
   employee3.setName("王五");
   employee3.setSell(100);
   employee3.setDepart(d);

   Set<Employee> set=new HashSet<Employee>();
   set.add(employee1);
   set.add(employee2);
   set.add(employee3);
   d.setEmps(set);
   s.save(d);
   s.save(employee1);
   s.save(employee2);
   s.save(employee3);
   
   t.commit();
  } catch (Exception e) {

  } finally {
   if (s != null) {
    s.close();
   }
  }
 }
}

posted @ 2008-11-03 21:13 zhaosoft 阅读(223) | 评论 (0)编辑 收藏

在项目里面真正的精华就是web.xml里面的这几行代码:
<filter>
 <filter-name>hibernateFilter</filter-name>
 <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter- class>
</filter>
<filter-mapping>
    <filter-name>hibernateFilter</filter-name>
    <url-pattern>*.do</url-pattern>
</filter-mapping>
    好啦,一切ok了。接下来的就有spring容器来帮我们做了。有的人也许会问了,你说得也太简单了吧?简单的让我不能相信了。其实不然,越复杂的东西有时候往往就是一句话的事。听我慢慢道来。
    这个属性就是为了支持hibernate的延迟加载而设计的,spring倡导的是面向接口编程,而且在源文件里面大量的使用了Factory-mode 和Singleton-mode。但是这就和hibernate的延迟加载产了冲突。如果不使用hibernate的 OpenSessionInViewFilter过滤器,那么当使用完getHibernateTemplet().save()或者delete()对象以后,spring会自动的关闭session。即使你使用了延迟加载的机能,spring也不会管你那套的。该关的session一刻也不等。当你想延迟加载某些类的某些设置为延迟加载的属性以后,spring就会报出session is close的错误,这该死的spring。为了优化系统的启动速度我才延迟的,为什么你这么不通情达理?不然,使用了 OpenSessionInViewFilter以后,当你save完一个对象以后,因为有这个过滤器,所以spring会把这个连接放到线程池里面,而不是马上就关闭。当需要延迟加载的时候,spring会从线程池里面取出那个session完成加载的动作。当确定这个session确实不再需要的时候,spring才会close掉这个session。原理就是这么简单。我们只需要做的就是在web.xml里面配置那几行代码,其他的就按照我们预期的做,spring会自动帮我们完成我们想要的。

posted @ 2008-11-02 10:28 zhaosoft 阅读(257) | 评论 (0)编辑 收藏

package com.backup;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;

public class Test {

 /**
     * @param args
     */
    public static void main(String[] args) {
        /*
         * 备份和导入是一个互逆的过程。
         * 备份:程序调用mysql的备份命令,读出控制台输入流信息,写入.sql文件;
         * 导入:程序调用mysql的导入命令,把从.sql文件中读出的信息写入控制台的输出流
         * 注意:此时定向符">"和"<"是不能用的
         */
        //backup();
        //load();
    }

    /**
     * 备份检验一个sql文件是否可以做导入文件用的一个判断方法:把该sql文件分别用记事本和ultra
     * edit打开,如果看到的中文均正常没有乱码,则可以用来做导入的源文件(不管sql文件的编码格式如何,也不管db的编码格式如何)
     */
    public static void backup() {
        try {
            Runtime rt = Runtime.getRuntime();

            // 调用 mysql 的 cmd:
            Process child = rt
                    .exec("mysqldump -u root --set-charset=utf8 pj");// 设置导出编码为utf8。这里必须是utf8
          
            // 把进程执行中的控制台输出信息写入.sql文件,即生成了备份文件。注:如果不对控制台信息进行读出,则会导致进程堵塞无法运行
            InputStream in = child.getInputStream();// 控制台的输出信息作为输入流
                      
            InputStreamReader xx = new InputStreamReader(in, "utf8");// 设置输出流编码为utf8。这里必须是utf8,否则从流中读入的是乱码
          
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            // 组合控制台输出信息字符串
            BufferedReader br = new BufferedReader(xx);
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();
          
            // 要用来做导入用的sql目标文件:
            FileOutputStream fout = new FileOutputStream(
                    "e:/bjse22.sql");
            OutputStreamWriter writer = new OutputStreamWriter(fout, "utf8");
            writer.write(outStr);
            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
            writer.flush();

            // 别忘记关闭输入输出流
            in.close();
            xx.close();
            br.close();
            writer.close();
            fout.close();

            System.out.println("/* Output OK! */");

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

    }

    /**
     * 导入
     *
     */
    public static void load() {
        try {
            String fPath = "e:/bjse22.sql";
            Runtime rt = Runtime.getRuntime();

            // 调用 mysql 的 cmd:
            Process child = rt.exec("mysql -u root pj ");
            OutputStream out = child.getOutputStream();//控制台的输入信息作为输出流
            String inStr;
            StringBuffer sb = new StringBuffer("");
            String outStr;
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    new FileInputStream(fPath), "utf8"));
            while ((inStr = br.readLine()) != null) {
                sb.append(inStr + "\r\n");
            }
            outStr = sb.toString();

            OutputStreamWriter writer = new OutputStreamWriter(out, "utf8");
            writer.write(outStr);
            // 注:这里如果用缓冲方式写入文件的话,会导致中文乱码,用flush()方法则可以避免
            writer.flush();
            // 别忘记关闭输入输出流
            out.close();
            br.close();
            writer.close();

            System.out.println("/* Load OK! */");

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

    }

}

posted @ 2008-10-30 08:01 zhaosoft 阅读(5224) | 评论 (1)编辑 收藏

<h3>使用s:tree和s:treenode标签生成静态树</h3>
<s:tree label="新维电脑专修学校" id="edu" theme="ajax"
 showRootGrid="true" showGrid="true" treeSelectedTopic="treeSelected">
    <s:treenode theme="ajax" label="软件开发" id="1">
        <s:treenode theme="ajax" label="软件一班" id="r1" onclick=""/>
        <s:treenode theme="ajax" label="软件二班" id="r2"/>
        <s:treenode theme="ajax" label="软件三班" id="r3"/>
    </s:treenode>
    <s:treenode theme="ajax" label="艺术设计" id="2">
        <s:treenode theme="ajax" label="艺术一班" id="y1"/>
        <s:treenode theme="ajax" label="艺术二班" id="y2"/>
        <s:treenode theme="ajax" label="艺术三班" id="y3"/>
       
    </s:treenode>
    <s:treenode theme="ajax" label="市场营销" id="3">
        <s:treenode theme="ajax" label="营销一班" id="x1"/>
    </s:treenode>
</s:tree>

posted @ 2008-10-30 08:00 zhaosoft 阅读(1175) | 评论 (0)编辑 收藏

1、什么是ArrayList
? ? ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处:
动态的增加和减少元素
实现了ICollection和IList接口
灵活的设置数组的大小

2、如何使用ArrayList
? ? 最简单的例子:
ArrayList List = new ArrayList();
for( int i=0;i<10;i++ ) //给数组增加10个Int元素
List.Add(i);
//..程序做一些处理
List.RemoveAt(5);//将第6个元素移除
for( int i=0;i<3;i++ ) //再增加3个元素
?? List.Add(i+20);
Int32[] values = (Int32[])List.ToArray(typeof(Int32));//返回ArrayList包含的数组

这是一个简单的例子,虽然没有包含ArrayList所有的方法,但是可以反映出ArrayList最常用的用法

3、ArrayList重要的方法和属性
1)构造器
? ? ArrayList提供了三个构造器:
public ArrayList();
默认的构造器,将会以默认(16)的大小来初始化内部的数组
public ArrayList(ICollection);
用一个ICollection对象来构造,并将该集合的元素添加到ArrayList
public ArrayList(int);
用指定的大小来初始化内部的数组

2)IsSynchronized属性和ArrayList.Synchronized方法
? ? IsSynchronized属性指示当前的ArrayList实例是否支持线程同步,而ArrayList.Synchronized静态方法则会返回一个ArrayList的线程同步的封装。
? ? 如果使用非线程同步的实例,那么在多线程访问的时候,需要自己手动调用lock来保持线程同步,例如:
ArrayList list = new ArrayList();
//...
lock( list.SyncRoot ) //当ArrayList为非线程包装的时候,SyncRoot属性其实就是它自己,但是为了满足ICollection的SyncRoot定义,这里还是使用SyncRoot来保持源代码的规范性
{
list.Add( “Add a Item” );
}

? ???如果使用ArrayList.Synchronized方法返回的实例,那么就不用考虑线程同步的问题,这个实例本身就是线程安全的,实际上 ArrayList内部实现了一个保证线程同步的内部类,ArrayList.Synchronized返回的就是这个类的实例,它里面的每个属性都是用 了lock关键字来保证线程同步。

3)Count属性和Capacity属性
? ? Count属性是目前ArrayList包含的元素的数量,这个属性是只读的。
Capacity属性是目前ArrayList能够包含的最大数量,可以手动的设置这个属性,但是当设置为小于Count值的时候会引发一个异常。

4)Add、AddRange、Remove、RemoveAt、RemoveRange、Insert、InsertRange
? ? 这几个方法比较类似
Add方法用于添加一个元素到当前列表的末尾
AddRange方法用于添加一批元素到当前列表的末尾
Remove方法用于删除一个元素,通过元素本身的引用来删除
RemoveAt方法用于删除一个元素,通过索引值来删除
RemoveRange用于删除一批元素,通过指定开始的索引和删除的数量来删除
Insert用于添加一个元素到指定位置,列表后面的元素依次往后移动
InsertRange用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

? ? 另外,还有几个类似的方法:
Clear方法用于清除现有所有的元素
Contains方法用来查找某个对象在不在列表之中

? ? 其他的我就不一一累赘了,大家可以查看MSDN,上面讲的更仔细
5)TrimSize方法
? ? 这个方法用于将ArrayList固定到实际元素的大小,当动态数组元素确定不在添加的时候,可以调用这个方法来释放空余的内存。
6)ToArray方法
? ? 这个方法把ArrayList的元素Copy到一个新的数组中。
4、ArrayList与数组转换
? ? 例1:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);

Int32[] values = (Int32[])List.ToArray(typeof(Int32));

? ? 例2:
ArrayList List = new ArrayList();
List.Add(1);
List.Add(2);
List.Add(3);

Int32[] values = new Int32[List.Count];
List.CopyTo(values);

? ? 上面介绍了两种从ArrayList转换到数组的方法

? ? 例3:
ArrayList List = new ArrayList();
List.Add( “string” );
List.Add( 1 );
//往数组中添加不同类型的元素

object[] values = List.ToArray(typeof(object)); //正确
string[] values = (string[])List.ToArray(typeof(string)); //错误

和数组不一样,因为可以转换为Object数组,所以往ArrayList里面添加不同类型的元素是不会出错的,但是当调用ArrayList方法的时候,要么传递所有元素都可以正确转型的类型或者Object类型,否则将会抛出无法转型的异常。


5、ArrayList最佳使用建议
? ? 这一节我们来讨论ArrayList与数组的差别,以及ArrayList的效率问题
?? 1)ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
?? 2)内部的Object类型的影响
? ?? ?? ? 对于一般的引用类型来说,这部分的影响不是很大,但是对于值类型来说,往ArrayList里面添加和修改元素,都会引起装箱和拆箱的操作,频繁的操作可能会影响一部分效率。
但是恰恰对于大多数人,多数的应用都是使用值类型的数组。
消除这个影响是没有办法的,除非你不用它,否则就要承担一部分的效率损失,不过这部分的损失不会很大。
?? 3)数组扩容
这是对ArrayList效率影响比较大的一个因素。
每 当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量 的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。
? ??? 例1:比如,一个可能有200个元素的数据动态添加到一个以默认16个元素大小创建的ArrayList中,将会经过:
16*2*2*2*2 = 256
四次的扩容才会满足最终的要求,那么如果一开始就以:
ArrayList List = new ArrayList( 210 );
的方式创建ArrayList,不仅会减少4次数组创建和Copy的操作,还会减少内存使用。

? ??? 例2:预计有30个元素而创建了一个ArrayList:
ArrayList List = new ArrayList(30);
在执行过程中,加入了31个元素,那么数组会扩充到60个元素的大小,而这时候不会有新的元素再增加进来,而且有没有调用TrimSize方法,那么就有1次扩容的操作,并且浪费了29个元素大小的空间。如果这时候,用:
ArrayList List = new ArrayList(40);
那么一切都解决了。
所以说,正确的预估可能的元素,并且在适当的时候调用TrimSize方法是提高ArrayList使用效率的重要途径。
? ? 4)频繁的调用IndexOf、Contains等方法(Sort、BinarySearch等方法经过优化,不在此列)引起的效率损失
首 先,我们要明确一点,ArrayList是动态数组,它不包括通过Key或者Value快速访问的算法,所以实际上调用IndexOf、Contains 等方法是执行的简单的循环来查找元素,所以频繁的调用此类方法并不比你自己写循环并且稍作优化来的快,如果有这方面的要求,建议使用Hashtable或 SortedList等键值对的集合。
ArrayList al=new ArrayList();

al.Add("How");
al.Add("are");
al.Add("you!");

al.Add(100);
al.Add(200);
al.Add(300);

al.Add(1.2);
al.Add(22.8);

.........

//第一种遍历 ArrayList 对象的方法
foreach(object o in al)
{
Console.Write(o.ToString()+" ");
}

//第二种遍历 ArrayList 对象的方法
IEnumerator ie=al.GetEnumerator();
while(ie.MoveNext())
{
Console.Write(ie.Curret.ToString()+" ");
}

//第三种遍历 ArrayList 对象的方法
我忘记了,好象是 利用 ArrayList对象的一个属性,它返回一此对象中的元素个数.

然后在利用索引
for(int i=0;i<Count;i++)
{
Console.Write(al[i].ToString()+" ");
}

posted @ 2008-10-29 23:06 zhaosoft 阅读(1073) | 评论 (0)编辑 收藏

struts2动态方法调用
  struts2中无需配置就可以直接调用Action中非execute方法的方式,就是试用struts2的动态动态方法调用。
动态方法调用(Dynamic method Invoc)是在action的名字中使用感叹号(!)来标示要调用的方法名,其语法格式为
  actionName!methodname.action
 例如我们的配置如下:
<action name="login" class="com.pj.action.LoginAction" >
<result type="json"></result>
</action>  
当请求/login!query.action时,将调用LoginAction的query()方法,当请求/login!save.action时,将调用LoginAction的save()方法。
strust2提供了一种配置,用于禁用DMI,你可以在struts.xml文件中,使用constant元素将struts.enable.DynamicMethodInvocation属性设置为false,来关闭DMI。

posted @ 2008-10-29 22:30 zhaosoft 阅读(2344) | 评论 (3)编辑 收藏