<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>JavaEye论坛最新讨论</title>
    <description>JavaEye论坛最新讨论 - Java编程，Ruby编程，微软.net，AJAX，敏捷软件开发，综合软件技术</description>
    <link>http://www.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>JAVA面试题解惑系列（七）——日期和时间的处理</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zangweiren.javaeye.com">臧圩人</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218271" style="color:red;">http://www.javaeye.com/topic/218271</a>&nbsp;
          发表时间: 2008年07月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          作者：臧圩人（zangweiren）<br />网址：http://zangweiren.javaeye.com<br /><br />>>><span style="color: red"><strong>转载请注明出处！</strong></span>&lt;&lt;&lt;<br /><br />日期和时间的处理不仅在面试题中会考到，在实际项目开发中也是我们经常需要处理的问题，似乎没有哪个项目可以避开它们，我们常常在处理用户的出生年月日、注册日期，订单的创建时间等属性时用到，由此可见其重要性。<br /><br />提到日期和时间，我想大家最先想到应该是java.util.Date类吧。Date类可以精确到毫秒数，这个毫秒数是相对于格林威治标准时间“1970-01-01 00:00:00.000 GMT”的差值。那么，什么是格林威治标准时间呢？要回答这个问题，我们需要先来了解一下世界时间标准方面的知识。<br /><br />世界时间标准主要有UTC，即Coordinated Universal Time（中文名译作世界协调时间、世界统一时间或世界标准时间），以及GMT，即Greenwich Mean Time（中文名译作格林威治标准时间或格林威治平均时间）两种。严格来讲，UTC比GMT更加精确一些，不过它们的差值不会超过0.9秒，如果超过了，将会为UTC增加闰秒以与GMT，也就是地球自转周期保持一致。所以在日常使用中，我们可以把UTC和GMT一样看待。<br /><br />日期和时间的表示是与我们所处的时区相关联的，如果我们不指定时区，那么它们将以系统默认的时区来显示。我们先来看看如何创建日期对象。Date类有很多个构造器方法，大部分已经不被赞成使用了（Deprecated），不过还剩下两个可以使用的：<br /><pre name="code" class="java">
public Date() {
    this(System.currentTimeMillis());
}

public Date(long date) {
    //other code
}
</pre><br />第一个是无参构造器，使用系统当前时间的毫秒数来创建Date对象，它调用了java.lang.System类的currentTimeMillis()来取得系统的当前时间的毫秒值。这是个本地方法，它的定义如下：<br /><pre name="code" class="java">
public static native long currentTimeMillis();
</pre><br />第二个构造器是根据给定的毫秒数来创建一个与之对应的Date对象，这个毫秒数决定了被创建对象的年、月、日、时、分、秒属性的值。<br /><br />我们来看看日期和时间在默认时区下的显示效果：<br /><pre name="code" class="java">
import java.util.Date;

public class DateTest {
	public static void main(String[] args) {
		Date d = new Date();
		// 在默认时区下输出日期和时间值
		System.out.println(d);
	}
}
</pre><br />运行结果：<br /><ul><li>Tue Jul 22 10:44:47 CST 2008</li></ul><br />大家应该注意到了年份前的“CST”标识，它是China Standard Time的缩写，指的是中国标准时间，也就是我们常说的北京时间。它与UTC的时差是UTC+8:00，就是说北京时间比世界标准时间早8个小时，如果世界标准时间是早上1点，北京时间就是早上9点。一般情况下我们不需要关心时区问题。<br /><br />在创建完Date对象之后，我们可以通过调用getTime()方法来获得该对象的毫秒数值，调用setTime(long time)方法来设置它的毫秒数值，从而影响年、月、日、时、分、秒这些属性。这两个方法的定义如下：<br /><pre name="code" class="java">
public long getTime() {
    //other code
}

public void setTime(long time) {
    //other code
}
</pre><br />既然Date对象可以表示盛相对于“1970-01-01 00:00:00.000 GMT”的毫秒数，我们自然可以通过这个值来比较两个日期的大小了，不过对于日期来讲，前后的说法应该更为恰当。而Date类已经为我们提供了这样的方法：<br /><pre name="code" class="java">
public boolean before(Date when) {
    //other code
}

public boolean after(Date when) {
    //other code
}

public int compareTo(Date anotherDate) {
    //other code
}
</pre><br />before()是判断当前日期是否在参数日期之前，即当前日期毫秒数小于参数日期毫秒数；after()是判断当前日期是否在参数日期之后，即当前日期毫秒数大于参数日期毫秒数。而compareTo()是将当前日期与参数日期比较后，返回一个int型值，它的返回值有三种可能：-1、0和1。如果返回-1则表示当前日期在参数日期之前；如果返回0则表示两个日期是同一时刻；返回1则表示当前日期在参数日期之后。虽然我们可以用compareTo()方法来比较两个Date对象，但是它的设计实际是另有用途的，我们在后面的章节将会讲到。<br /><br />下面我们就用一个示例来检验一下以上方法的用法：<br /><pre name="code" class="java">
import java.util.Date;

public class DateTest {
	public static void main(String[] args) {
		// 2008-08-08 20:00:00对应的毫秒数
		long t2008 = 1218196800000L;
		// 1900-01-01 20:00:00对应的毫秒数
		long t1900 = -2208945952000L;

		// 指定毫秒数创建Date对象
		Date d2008 = new Date(t2008);
		// 使用系统默认时间创建Date对象
		Date d1900 = new Date();
		// 通过设置毫秒数改变日期和时间
		d1900.setTime(t1900);

		System.out.println("调用方法：d1900.before(d2008)");
		System.out
				.print("比较结果：\"1900-01-01 20:00:00\"在\"2008-08-08 20:00:00\"");
		// 使用before()方法比较
		if (d1900.before(d2008)) {
			System.out.println("之前");
		} else {
			System.out.println("之后");
		}
		
		System.out.println();
		
		System.out.println("调用方法：d2008.after(d1900)");
		System.out
				.print("比较结果：\"2008-08-08 20:00:00\"在\"1900-01-01 20:00:00\"");
		// 使用before()方法比较
		if (d2008.after(d1900)) {
			System.out.println("之后");
		} else {
			System.out.println("之前");
		}
		
		System.out.println();
		
		System.out.println("调用方法：d1900.compareTo(d2008)");
		System.out
				.print("比较结果：\"1900-01-01 20:00:00\"在\"2008-08-08 20:00:00\"");
		// 使用compareTo()方法比较
		int i = d1900.compareTo(d2008);
		if (i == -1) {
			System.out.println("之前");
		} else if (i == 1) {
			System.out.println("之后");
		} else if (i == 0) {
			System.out.println("是同一时刻");
		}
	}
}
</pre><br />运行结果：<br /><ol><li>调用方法：d1900.before(d2008)</li><li>比较结果："1900-01-01 20:00:00"在"2008-08-08 20:00:00"之前</li><li></li><li>调用方法：d2008.after(d1900)</li><li>比较结果："2008-08-08 20:00:00"在"1900-01-01 20:00:00"之后</li><li></li><li>调用方法：d1900.compareTo(d2008)</li><li>比较结果："1900-01-01 20:00:00"在"2008-08-08 20:00:00"之前</li></ol><br />那么如果我们想直接获取或者改变年、月、日、时、分、秒等等这些属性的值时怎么办呢？Date类当然有完成这些操作的方法，不过遗憾的是它们也都已经不被赞成使用了。我们必须换一个能够提供这些操作的类，这个类就是java.util.Calendar。<br /><br />Calendar是一个抽象类，我们无法直接实例化它，它有一个具体子类实体类java.util.GregorianCalendar，这个类实现的就是我们日常所用的公历历法，或者叫做阳历。我们可以直接使用new命令创建它的实例，或者使用Calendar类的这个方法来获得它实例：<br /><pre name="code" class="java">
public static Calendar getInstance(){
    //other code
}
</pre><br />采用上面这个方法时，我们创建的Calendar对象的日期和时间值是对象被创建时系统日期和时间值。当使用new命令时，我们有两种选择，一种是使用系统当前的日期和时间值初始化GregorianCalendar对象；另一种是通过给定年、月、日、时、分、秒等属性值来对其进行初始化。请看下面的例子：<br /><pre name="code" class="java">
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class DateTest {
	/**
	 * 以一种较为友好的方式格式化日期时间值
	 * 
	 * @param c
	 *            日期时间对象
	 * @return 格式化后的日期时间字符串
	 */
	public static String toFriendlyString(Calendar c) {
		if (c != null) {
			DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
			return df.format(c.getTime());
		}
		return null;
	}

	public static void main(String[] args) {
		Calendar c1 = Calendar.getInstance();
		System.out.println("创建方式：Calendar.getInstance()");
		System.out.println("日期时间：" + DateTest.toFriendlyString(c1));
		System.out.println();

		Calendar c2 = new GregorianCalendar();
		System.out.println("创建方式：new GregorianCalendar()");
		System.out.println("日期时间：" + DateTest.toFriendlyString(c2));
		System.out.println();

		// 参数含义依次为：年、月、日
		Calendar c3 = new GregorianCalendar(2008, 8, 8);
		System.out.println("创建方式：new GregorianCalendar(2008, 8, 8)");
		System.out.println("日期时间：" + DateTest.toFriendlyString(c3));
		System.out.println();

		// 参数含义依次为：年、月、日、时、分
		Calendar c4 = new GregorianCalendar(2008, 8, 8, 6, 10);
		System.out.println("创建方式：new GregorianCalendar(2008, 8, 8, 6, 10)");
		System.out.println("日期时间：" + DateTest.toFriendlyString(c4));
		System.out.println();

		// 参数含义依次为：年、月、日、时、分、秒
		Calendar c5 = new GregorianCalendar(2008, 8, 8, 18, 10, 5);
		System.out.println("创建方式：new GregorianCalendar(2008, 8, 8, 18, 10, 5)");
		System.out.println("日期时间：" + DateTest.toFriendlyString(c5));
	}
}
</pre><br />运行结果如下：<br /><ol><li>创建方式：Calendar.getInstance()</li><li>日期时间：2008年07月22日 11:54:48</li><li></li><li>创建方式：new GregorianCalendar()</li><li>日期时间：2008年07月22日 11:54:48</li><li></li><li>创建方式：new GregorianCalendar(2008, 8, 8)</li><li>日期时间：2008年09月08日 00:00:00</li><li></li><li>创建方式：new GregorianCalendar(2008, 8, 8, 6, 10)</li><li>日期时间：2008年09月08日 06:10:00</li><li></li><li>创建方式：new GregorianCalendar(2008, 8, 8, 18, 10, 5)</li><li>日期时间：2008年09月08日 18:10:05</li></ol><br />为了便于阅读，我们增加一个toFriendlyString(Calendar c)方法，它将日期时间值格式化为一种更加友好易懂的形式，我们将在接下来的内容中讲解它的实现原理。分析运行结果后，我们发现有两个地方需要注意：<br /><ol><li>在创建GregorianCalendar对象时，月份值都设定为8，但打印结果都是9月份。这并不是我们的代码有问题，而是因为JAVA表示的月份是从0开始的，也就是说它用来表示月份的数值总是比实际月份值小1。因此我们要表示8月份，就是应该设置8-1=7这个值。</li><li>GregorianCalendar的小时数是24小时制的。</li></ol><br />如果我们想要从Calendar对象获得各种属性的值，就需要调用它的get(int field)方法，这个方法接收一个int型的参数，并且根据这个给定参数的值来返回相应的属性的值。该方法的定义如下：<br /><pre name="code" class="java">
public int get(int field){
    //other code
}
</pre><br />我们以一个示例来说明get(int field)方法所能接受的一些常用参数的含义及用法：<br /><pre name="code" class="java">
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class DateTest {
	/**
	 * 以一种较为友好的方式格式化日期时间值
	 * 
	 * @param c
	 *            日期时间对象
	 * @return 格式化后的日期时间字符串
	 */
	public static String toFriendlyString(Calendar c) {
		if (c != null) {
			DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
			return df.format(c.getTime());
		}
		return null;
	}

	public static void main(String[] args) {
		Calendar c = Calendar.getInstance();
		System.out.println("当前时刻：" + DateTest.toFriendlyString(c));
		System.out.println();

		System.out.println("属性名称：Calendar.AM_PM");
		System.out.println("代表含义：上下午标识，上午返回Calendar.AM=0，下午返回Calendar.PM=1");
		System.out.println("测试结果：" + c.get(Calendar.AM_PM));
		System.out.println();

		System.out.println("属性名称：Calendar.DATE");
		System.out.println("代表含义：一个月中的第几天，同Calendar.DAY_OF_MONTH");
		System.out.println("测试结果：" + c.get(Calendar.DATE));
		System.out.println();

		System.out.println("属性名称：Calendar.DAY_OF_MONTH");
		System.out.println("代表含义：一个月中的第几天，同Calendar.DATE");
		System.out.println("测试结果：" + c.get(Calendar.DAY_OF_MONTH));
		System.out.println();

		System.out.println("属性名称：Calendar.DAY_OF_WEEK");
		System.out.println("代表含义：星期几。");
		System.out.println("星期日:Calendar.SUNDAY=1");
		System.out.println("星期一:Calendar.MONDAY=2");
		System.out.println("星期二:Calendar.TUESDAY=3");
		System.out.println("星期三:Calendar.WEDNESDAY=4");
		System.out.println("星期四:Calendar.THURSDAY=5");
		System.out.println("星期五:Calendar.FRIDAY=6");
		System.out.println("星期六:Calendar.SATURDAY=7");
		System.out.println("测试结果：" + c.get(Calendar.DAY_OF_WEEK));
		System.out.println();

		System.out.println("属性名称：Calendar.DAY_OF_WEEK_IN_MONTH");
		System.out.println("代表含义：这一天所对应的星期几在该月中是第几次出现");
		System.out.println("测试结果：" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
		System.out.println();

		System.out.println("属性名称：Calendar.DAY_OF_YEAR");
		System.out.println("代表含义：一年中的第几天");
		System.out.println("测试结果：" + c.get(Calendar.DAY_OF_YEAR));
		System.out.println();

		System.out.println("属性名称：Calendar.HOUR");
		System.out.println("代表含义：12小时制下的小时数，中午和午夜表示为0");
		System.out.println("测试结果：" + c.get(Calendar.HOUR));
		System.out.println();

		System.out.println("属性名称：Calendar.HOUR_OF_DAY");
		System.out.println("代表含义：24小时制下的小时数，午夜表示为0");
		System.out.println("测试结果：" + c.get(Calendar.HOUR_OF_DAY));
		System.out.println();

		System.out.println("属性名称：Calendar.MILLISECOND");
		System.out.println("代表含义：毫秒数");
		System.out.println("测试结果：" + c.get(Calendar.MILLISECOND));
		System.out.println();

		System.out.println("属性名称：Calendar.MINUTE");
		System.out.println("代表含义：分钟");
		System.out.println("测试结果：" + c.get(Calendar.MINUTE));
		System.out.println();

		System.out.println("属性名称：Calendar.MONTH");
		System.out.println("代表含义：月份，从0到11表示12个月份，比实际月份值小1");
		System.out.println("测试结果：" + c.get(Calendar.MONTH));
		System.out.println();

		System.out.println("属性名称：Calendar.SECOND");
		System.out.println("代表含义：秒");
		System.out.println("测试结果：" + c.get(Calendar.SECOND));
		System.out.println();

		System.out.println("属性名称：Calendar.WEEK_OF_MONTH");
		System.out.println("代表含义：一个月中的第几个星期");
		System.out.println("测试结果：" + c.get(Calendar.WEEK_OF_MONTH));
		System.out.println();

		System.out.println("属性名称：Calendar.WEEK_OF_YEAR");
		System.out.println("代表含义：一年中的第几个星期");
		System.out.println("测试结果：" + c.get(Calendar.WEEK_OF_YEAR));
		System.out.println();

		System.out.println("属性名称：Calendar.YEAR");
		System.out.println("代表含义：年份");
		System.out.println("测试结果：" + c.get(Calendar.YEAR));
	}
}
</pre><br />运行结果如下：<br /><ol><li>当前时刻：2008年07月22日 13:16:07.421</li><li></li><li>属性名称：Calendar.AM_PM</li><li>代表含义：上下午标识，上午返回Calendar.AM=0，下午返回Calendar.PM=1</li><li>测试结果：1</li><li></li><li>属性名称：Calendar.DATE</li><li>代表含义：一个月中的第几天，同Calendar.DAY_OF_MONTH</li><li>测试结果：22</li><li></li><li>属性名称：Calendar.DAY_OF_MONTH</li><li>代表含义：一个月中的第几天，同Calendar.DATE</li><li>测试结果：22</li><li></li><li>属性名称：Calendar.DAY_OF_WEEK</li><li>代表含义：星期几。</li><li>星期日:Calendar.SUNDAY=1</li><li>星期一:Calendar.MONDAY=2</li><li>星期二:Calendar.TUESDAY=3</li><li>星期三:Calendar.WEDNESDAY=4</li><li>星期四:Calendar.THURSDAY=5</li><li>星期五:Calendar.FRIDAY=6</li><li>星期六:Calendar.SATURDAY=7</li><li>测试结果：3</li><li></li><li>属性名称：Calendar.DAY_OF_WEEK_IN_MONTH</li><li>代表含义：这一天所对应的星期几在该月中是第几次出现</li><li>测试结果：4</li><li></li><li>属性名称：Calendar.DAY_OF_YEAR</li><li>代表含义：一年中的第几天</li><li>测试结果：204</li><li></li><li>属性名称：Calendar.HOUR</li><li>代表含义：12小时制下的小时数，中午和午夜表示为0</li><li>测试结果：1</li><li></li><li>属性名称：Calendar.HOUR_OF_DAY</li><li>代表含义：24小时制下的小时数，午夜表示为0</li><li>测试结果：13</li><li></li><li>属性名称：Calendar.MILLISECOND</li><li>代表含义：毫秒数</li><li>测试结果：421</li><li></li><li>属性名称：Calendar.MINUTE</li><li>代表含义：分钟</li><li>测试结果：16</li><li></li><li>属性名称：Calendar.MONTH</li><li>代表含义：月份，从0到11表示12个月份，比实际月份值小1</li><li>测试结果：6</li><li></li><li>属性名称：Calendar.SECOND</li><li>代表含义：秒</li><li>测试结果：7</li><li></li><li>属性名称：Calendar.WEEK_OF_MONTH</li><li>代表含义：一个月中的第几个星期</li><li>测试结果：4</li><li></li><li>属性名称：Calendar.WEEK_OF_YEAR</li><li>代表含义：一年中的第几个星期</li><li>测试结果：30</li><li></li><li>属性名称：Calendar.YEAR</li><li>代表含义：年份</li><li>测试结果：2008</li></ol><br />其中Calendar.DAY_OF_WEEK_IN_MONTH代表的含义比较难理解一些，它表示“这一天所对应的星期几在该月中是第几次出现”。比如2008年8月8日是星期五，在它之前的8月1日也是星期五，因此它是8月份的第二个星期五。所以这时调用get(Calendar.DAY_OF_WEEK_IN_MONTH)就会返回2。这里存在一个简单易记的规律：对于每月的1-7号，它们一定占全了星期一到星期日，所以不管是它们中的哪一天，也不管这一天是星期几，它总是第一个，因此返回1；8-14号也同样占全了星期一到星期日，但由于1-7号的关系，对于它们总是返回2；以此类推，15-21号返回3，22-28号返回4，29-31号返回5。<br /><br />Calendar对象和Date对象可以通过Calendar类的如下两个方法进行相互转换：<br /><pre name="code" class="java">
public final Date getTime() {
    //other code
}

public final void setTime(Date date) {
    //other code
}
</pre><br />我们回头再来看看在上面的例子中定义的toFriendlyString(Calendar c)方法，它将一个Calendar对象的日期时间值以一种很友好的方式来展现，使人们很容易看懂，也符合我们中国人的习惯。这完全得益于抽象类DateFormat以及它的子类实体类SimpleDateFormat的帮助。这两个类都位于java.text包中，是专门用于日期格式化和解析的类。而这两项工作的核心就是我们为此设定的Pattern，我们可以称之为“日期格式表达式”。<br /><br />理论上讲日期格式表达式包含全部26个英文字母的大小写，不过它们中的一些字母只是被预留了，并没有确切的含义。目前有效的字母及它们所代表的含义如下：<br /><ul><li>G：年代标识，表示是公元前还是公元后</li><li>y：年份</li><li>M：月份</li><li>d：日</li><li>h：小时，从1到12，分上下午</li><li>H：小时，从0到23</li><li>m：分钟</li><li>s：秒</li><li>S：毫秒</li><li>E：星期几    </li><li>z：时区</li><li>D：一年中的第几天</li><li>F：这一天所对应的星期几在该月中是第几次出现</li><li>w：一年中的第几个星期</li><li>W：一个月中的第几个星期</li><li>a：上午/下午标识 </li><li>k：小时，从1到24</li><li>K：小时，从0到11，区分上下午</li></ul><br />在日期格式表达式中出现的所有字母，在进行日期格式化操作后，都将被其所代表的含义对应的属性值所替换，并且对某些字母来说，重复次数的不同，格式化后的结果也会有所不同。请看下面的例子：<br /><pre name="code" class="java">
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
	public static void main(String[] args) {
		// 使用系统当前日期时间值创建一个Date对象
		Date now = new Date();

		// 创建一个日期格式表达式
		String pattern = "年代:G;年份:y;月份:M;日:d;时(1~12):h;时(0~23):H;分:m;秒:s;毫秒:S;星期:E;上/下午:a;时区:z";
		// 使用日期格式表达式创建一个SimpleDateFormat对象
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		// 调用SimpleDateFormat类的format(Date date)方法对Date对象进行格式化，并返回格式化后的字符串。
		// 该方法继承自java.text.DateFormat类
		System.out.println("1位：" + df.format(now));

		// 创建一个新的日期格式表达式
		pattern = "年代:GG;年份:yy;月份:MM;日:dd;时(1~12):hh;时(0~23):HH;分:mm;秒:ss;毫秒:SS;星期:EE;上/下午:aa;时区:zz";
		// 调用SimpleDateFormat的applyPattern(String pattern)方法用新创建的日期格式表达式替换其原有的
		df.applyPattern(pattern);
		System.out.println("2位：" + df.format(now));

		pattern = "年代:GGG;年份:yyy;月份:MMM;日:ddd;时(1~12):hhh;时(0~23):HHH;分:mmm;秒:sss;毫秒:SSS;星期:EEE;上/下午:aaa;时区:zzz";
		df.applyPattern(pattern);
		System.out.println("3位：" + df.format(now));

		pattern = "年代:GGGG;年份:yyyy;月份:MMMM;日:dddd;时(1~12):hhhh;时(0~23):HHHH;分:mmmm;秒:ssss;毫秒:SSSS;星期:EEEE;上/下午:aaaa;时区:zzzz";
		df.applyPattern(pattern);
		System.out.println("4位：" + df.format(now));

		pattern = "年代:GGGGG;年份:yyyyy;月份:MMMMM;日:ddddd;时(1~12):hhhhh;时(0~23):HHHHH;分:mmmmm;秒:sssss;毫秒:SSSSS;星期:EEEEE;上/下午:aaaaa;时区:zzzzz";
		df.applyPattern(pattern);
		System.out.println("5位：" + df.format(now));

		pattern = "年代:GGGGGG;年份:yyyyyy;月份:MMMMMM;日:dddddd;时(1~12):hhhhhh;时(0~23):HHHHHH;分:mmmmmm;秒:ssssss;毫秒:SSSSSS;星期:EEEEEE;上/下午:aaaaaa;时区:zzzzzz";
		df.applyPattern(pattern);
		System.out.println("6位：" + df.format(now));
	}
}
</pre><br />输出结果如下：<br /><ol><li>1位：年代:公元;年份:08;月份:7;日:22;时(1~12):3;时(0~23):15;分:17;秒:49;毫秒:187;星期:星期二;上/下午:下午;时区:CST</li><li>2位：年代:公元;年份:08;月份:07;日:22;时(1~12):03;时(0~23):15;分:17;秒:49;毫秒:187;星期:星期二;上/下午:下午;时区:CST</li><li>3位：年代:公元;年份:08;月份:七月;日:022;时(1~12):003;时(0~23):015;分:017;秒:049;毫秒:187;星期:星期二;上/下午:下午;时区:CST</li><li>4位：年代:公元;年份:2008;月份:七月;日:0022;时(1~12):0003;时(0~23):0015;分:0017;秒:0049;毫秒:0187;星期:星期二;上/下午:下午;时区:中国标准时间</li><li>5位：年代:公元;年份:02008;月份:七月;日:00022;时(1~12):00003;时(0~23):00015;分:00017;秒:00049;毫秒:00187;星期:星期二;上/下午:下午;时区:中国标准时间</li><li>6位：年代:公元;年份:002008;月份:七月;日:000022;时(1~12):000003;时(0~23):000015;分:000017;秒:000049;毫秒:000187;星期:星期二;上/下午:下午;时区:中国标准时间</li></ol><br />如果我们想输出原始的字母，而不是它们所代表含义的替换值，就需要用单引号将它们包含在内，对于预留字母也是如此，虽然它们没有确切的含义。一对单引号可以一次包含多个字母，而两个连续的单引号将输出一个单引号结果，双引号则需要转义后输出。对于26个字母之外的字符，可以放在一对单引号中，也可以直接书写。请看下面的例子：<br /><pre name="code" class="java">
import java.text.SimpleDateFormat;
import java.util.Date;

public class Test {
	public static void main(String[] args) {
		Date now = new Date();
		SimpleDateFormat df = new SimpleDateFormat(
				"'YEAR': yyyy 'MONTH:' ''MM'' 'DAY:' \"dd\" ");
		System.out.println(df.format(now));
	}
}
</pre><br />运行结果：<br /><ul><li>YEAR: 2008 MONTH: '07' DAY: "22" </li></ul><br />上面的一些例子中，我们将日期对象转换成一定格式的字符串输出，以得到符合我们习惯的较为友好的表现形式。我们还可以反过来，使用DateFormat类的parse(String source)方法将具有一定格式的字符串转换为一个Date对象，前提是我们利用前面讲到日期格式表达式语法为其找到一个合适的Pattern。例如：<br /><pre name="code" class="java">
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
	public static void main(String[] args) throws ParseException {
		String s = "2008-08-08";
		System.out.println("原始字符串：" + s);
		String pattern = "yyyy-MM-dd";
		System.out.println("对应表达式：" + pattern);
		SimpleDateFormat df = new SimpleDateFormat(pattern);
		Date date = df.parse(s);
		System.out.println("转换后的值：" + date);
		System.out.println();

		s = "05年2月12日 18:04:33";
		System.out.println("原始字符串：" + s);
		pattern = "yy年M月d日 HH:mm:ss";
		System.out.println("对应表达式：" + pattern);
		df.applyPattern(pattern);
		date = df.parse(s);
		System.out.println("转换后的值：" + date);
		System.out.println();

		s = "16/5/2004 20:7:2.050";
		System.out.println("原始字符串：" + s);
		pattern = "d/M/yyyy HH:m:s.SSS";
		System.out.println("对应表达式：" + pattern);
		df.applyPattern(pattern);
		date = df.parse(s);
		System.out.println("转换后的值：" + date);
	}
}
</pre><br />运行结果：<br /><ol><li>原始字符串：2008-08-08</li><li>对应表达式：yyyy-MM-dd</li><li>转换后的值：Fri Aug 08 00:00:00 CST 2008</li><li></li><li>原始字符串：05年2月12日 18:04:33</li><li>对应表达式：yy年M月d日 HH:mm:ss</li><li>转换后的值：Sat Feb 12 18:04:33 CST 2005</li><li></li><li>原始字符串：16/5/2004 20:7:2.050</li><li>对应表达式：d/M/yyyy HH:m:s.SSS</li><li>转换后的值：Sun May 16 20:07:02 CST 2004</li></ol>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218271#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 16:52:04 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218271</link>
        <guid>http://www.javaeye.com/topic/218271</guid>
      </item>
      <item>
        <title>有诚意要招人的来看看,最近打算跳槽.</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://seeyou001.javaeye.com">seeyou001</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218602" style="color:red;">http://www.javaeye.com/topic/218602</a>&nbsp;
          发表时间: 2008年07月23日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本科非计算机专业毕业,工作经验半年,目前薪资4.5K,在上海.<br />比较实在的评价一下自己的能力,当然一切以面试为主:最擅长J2SE,能根据指定数据结构进行bit位等低层操作.不管是J2EE项目还是J2ME项目都可以胜任,了解常用模式并能在项目中使用.自学能力不错,喜欢挑战能够自学任何新的东西,没有依赖性,习惯自己百度解决问题,有具体项目作品可以提供.<br />跳槽原因是不喜欢目前的工作环境和工作性质,希望能进入一家上进,高效,一切以工作为重点,自由,注重培养员工的优秀公司长期发展.<br />我不是天才,只是比较勤奋,并且纯粹对编程感兴趣而选择这个行业.其他的不多说了，有诚意想招人的请加我MSN:icelight1984@live.cn吧.
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218602#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 15:34:21 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218602</link>
        <guid>http://www.javaeye.com/topic/218602</guid>
      </item>
      <item>
        <title>extjs-grid:自定义编辑器，以时间列为例</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://todayapple.javaeye.com">todayapple</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219537" style="color:red;">http://www.javaeye.com/topic/219537</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br />&lt;html><br />&lt;head><br />   &lt;title> New Document &lt;/title><br />    &lt;link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" /> <br />    &lt;script type="text/javascript" src="adapter/ext/ext-base.js">&lt;/script><br />    &lt;script type="text/javascript" src="ext-all.js">&lt;/script><br />&lt;/head><br /><br />&lt;body><br /><br />&lt;br><br />  &lt;script><br /> <br /> Ext.onReady(function(){<br /><br />	//定义表格<br />	 var grid = new Ext.grid.PropertyGrid({<br />		title:'属性表格',<br />		renderTo: 'grid',<br />		width:300,<br />		autoHeight: true,<br />		customEditors: {<br />			'Start Time':new Ext.grid.GridEditor(new Ext.form.TimeField({selectOnFocus:true}))<br />		},<br />		source: {<br />			'Start Time':'10:00 AM'<br />		}<br />		<br />	});<br />		<br />		//可选的。用来控制VALUE是不是可修改的<br />		grid.on("beforeedit",function(e) {<br />			e.cancel = false;<br />			return true;<br />		});<br />				<br />	});<br /><br /><br />    &lt;/script><br />    <br />	<br />	&lt;table border="1" align="center"><br />		&lt;tr><br />			&lt;td>&lt;font color="red">PropertyGrid表格样式如下：&lt;/font>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;div id="grid" >	&lt;/div>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;input type="submit" id="remove" value="提交内容"/>&lt;/td><br />		&lt;/tr><br /><br />	&lt;/table><br />&lt;/body><br />&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219537#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 15:05:10 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219537</link>
        <guid>http://www.javaeye.com/topic/219537</guid>
      </item>
      <item>
        <title>工作经验一年，在北京和杭州在工作薪资方面应该提多少好了（Java web 方向）</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://ajax-core.javaeye.com">xuyongping</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219532" style="color:red;">http://www.javaeye.com/topic/219532</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          如题。谢谢大家了。。
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219532#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 15:00:15 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219532</link>
        <guid>http://www.javaeye.com/topic/219532</guid>
      </item>
      <item>
        <title>杭州的RUBY程序员大概工资在多少价位</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://tianma168.javaeye.com">tianma168</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219531" style="color:red;">http://www.javaeye.com/topic/219531</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本人正从.NET转向RUBY 弱弱的问下
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219531#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:53:58 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219531</link>
        <guid>http://www.javaeye.com/topic/219531</guid>
      </item>
      <item>
        <title>如何能绕过代理服务器的缓存？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://huangxuchu.javaeye.com">Alex Hwang</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219528" style="color:red;">http://www.javaeye.com/topic/219528</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          客户通过代理服务器访问我们的应用，但是当代理服务器缓存中有当前请求的URL的数据，<br />就会直接将缓存中的数据返回给客户端浏览器。<br /><br />如何才能绕开缓存，每次都从应用服务器中重新获取数据？
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219528#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:51:49 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219528</link>
        <guid>http://www.javaeye.com/topic/219528</guid>
      </item>
      <item>
        <title>grid表格里的复选框架，改字体色，加图片</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://todayapple.javaeye.com">todayapple</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219525" style="color:red;">http://www.javaeye.com/topic/219525</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br />&lt;html><br />&lt;head><br />   &lt;title> New Document &lt;/title><br />    &lt;link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" /> <br />    &lt;script type="text/javascript" src="adapter/ext/ext-base.js">&lt;/script><br />    &lt;script type="text/javascript" src="ext-all.js">&lt;/script><br />&lt;/head><br /><br />&lt;body><br /><br />&lt;br><br />  &lt;script><br /> <br /> Ext.onReady(function(){<br /><br />	var sm = new Ext.grid.CheckboxSelectionModel();<br /><br />    var cm = new Ext.grid.ColumnModel([<br />		new Ext.grid.RowNumberer(),<br />		sm,<br />		{header:'编号',dataIndex:'id',width:40,sortable:true},<br />		{header:'名称',dataIndex:'name',width:80},<br />		{id:'descn',header:'描述',dataIndex:'descn',width:200,renderer:renderDescn},<br />		{header:'性别',dataIndex:'sex',width:80,renderer: function (value){<br />			if ( value == 'male')<br />			{<br />				return "&lt;span style='color:red;font-weight:bold;'>男&lt;/span>&lt;img src='drop-no.gif' />";<br />			} else {<br />				return "&lt;span style='color:green;font-weight:bold;'>女&lt;/span>&lt;img src='drop-add.gif' />";<br />			}<br /><br />		}},{<br />			header:'日期列',<br />			dataIndex:'date',<br />			editor: new Ext.grid.GridEditor(new Ext.form.DateField( {<br />				format:'Y-m-d',<br />				minValue:'2007-12-14',<br />				disabledDays:[0,6],<br />				disabledDaysText:'只能选择工作日'<br />				} )),<br />			renderer: function(value) {<br />				return value.format("Y-m-d");<br />				}<br />		}<br /><br />		//{header:'日期',dateIndex:'date',type:'date',renderer:Ext.util.Format.dateRenderer('Y年m月d日')}<br />	]); <br /><br />	var data = [<br />	<br />		['1','啊','descn1','male',new Date()],<br />		['2','波','descn2','female',new Date()],<br />		['3','车','descn3','male',new Date()],<br />		['4','衣','descn4','female',new Date()],<br />		['5','服','descn5','male',new Date()],<br />		['6','波','descn2','female',new Date()],<br />		['7','车','descn3','male',new Date()],<br />		['8','衣','descn4','female',new Date()]<br />	];<br /><br />	var store = new Ext.data.Store({<br />		proxy: new Ext.data.MemoryProxy(data),<br />		reader: new Ext.data.ArrayReader({}, [<br />			{name:'id'},<br />			{name:'name'},<br />			{name:'descn'},<br />			{name:'sex'},<br />			{name:'date'}<br />			//{name:'date',type:'date',dateFormat:'Y-m-dTH:i:s'}<br />		]),<br />		sortInfo: {field:"name", direction:"ASC"}<br />	});<br />	//store.load();<br /><br /><br />	function renderDescn(value, cellmeta, record, rowIndex, columnIndex, store) {<br />	<br />		var str = "&lt;input type='button' value='查看详细信息' onclick='alert(\"" + <br />		"这个单元格的值是：" + value + "\\n" +<br />		"这个单元格的配置是：{cellId:" + cellmeta.cellId + ",id:" + cellmeta.id + ",css:" + cellmeta.css + "}\\n" +<br />		"这个单元格对应行的record是：" + record + ",一行的数据都在里面\\n" +<br />		"这是第" + rowIndex + "行\\n" + <br />		"这是第" + columnIndex + "列\\n" +<br />		"这个表格对应的Ext.data.Store在这里：" + store + ",随便用吧." + <br />		"\")'>";<br />				<br />		return str;<br />	}<br /><br />	 var grid = new Ext.grid.GridPanel({<br />		renderTo: 'grid',<br />		width:650,<br />		height: 250,<br />		//loadMask: true,<br />		stripeRows:true,<br />		store: store,<br />		cm: cm,<br />		sm:sm,<br />		//viewConfig:{<br />		//	forceFit: true<br />		//}<br />		//autoExpandColumn:'descn',<br />		bbar:new Ext.PagingToolbar({<br />			pageSize:2,<br />			store:store,<br />			displayInfo:true,<br />			displayMsg:'显示第{0}条到{1}条记录，一共{2}条',<br />			emptyMsg:"没有记录"<br />		})<br />		<br />	});<br />		store.load();<br /><br />	Ext.get('remove').on('click',function() {<br />		store.remove(store.getAt(1));<br />		grid.view.refresh();<br />	});<br />		<br />});<br />	<br />    &lt;/script><br />    <br />	<br />	&lt;table border="1" align="center"><br />		&lt;tr><br />			&lt;td>&lt;font color="red">grid表格样式如下：&lt;/font>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;div id="grid">	&lt;/div>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;input type="button" id="remove" value="删除第二行"/>&lt;/td><br />		&lt;/tr><br /><br />	&lt;/table><br />&lt;/body><br />&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219525#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:47:42 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219525</link>
        <guid>http://www.javaeye.com/topic/219525</guid>
      </item>
      <item>
        <title>找工作遇到无耻公司</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://nj-racoon.javaeye.com">nj-racoon</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218652" style="color:red;">http://www.javaeye.com/topic/218652</a>&nbsp;
          发表时间: 2008年07月23日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>事情是这样的，昨天同学遭遇到了一个无耻公司的无耻经理，他是上周五去面试的，面了6轮，最终跟人力就工资，待遇啥的都谈妥了，那个人事经理让他尽快办理离职手续，尽快去他们公司报道。昨天我同学打电话给该公司人事经理说已经跟原公司提辞职了，月底正式离职，问他们什么时候可以去他们公司上班，但是这时那个人事经理却说了一句无耻之极的话，<span style="font-size: small; color: #ff0000;">说我们暂时不需要了，由于部门调整，暂时这个岗位不需要了</span>，而且一点道歉之意都没有，也没其他任何解释，<span style="color: #000000;">我同学听了就很气愤，但是当时他气的懵了，就说好，也没问他们所以然。</span></p>
<p>今天中午给他们打电话要说法，但是那个人事经理依然很傲慢，一丝歉意都没有，我不知道是不是他们公司真的不要人，还是耍人玩呢，如果我同学不打电话，那个人事也就一直不通知他，他如果早点跟他说调整的话，我同学就不会这么着急的辞职了，现在辞职已经定局了，这边被那帮无耻的人耍了，我们都很气愤。大家支支招，咽不下这口气。</p>
<p>&nbsp;</p>
<p>PS:这家公司在南京，叫<strong><span style="font-size: small; color: #ff0000;">南京义铎科技</span></strong>，做网络安全设备的，老板据说是以前趋势科技出来的，对外宣称是欧美企业，其实是台资，以后如果有兄弟去这家公司面试，要擦亮眼睛，看清楚了。</p>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218652#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 17:24:42 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218652</link>
        <guid>http://www.javaeye.com/topic/218652</guid>
      </item>
      <item>
        <title>如何对没有任何项目经验的学生进行培训？</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://for-cyan.javaeye.com">for_cyan</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/216566" style="color:red;">http://www.javaeye.com/topic/216566</a>&nbsp;
          发表时间: 2008年07月19日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近要带一批学生做一个项目，B/S结构，用java平台进行开发，10几个人，几乎都没有任何基础，甚至连Java基础都不牢固，他们以前学的方向都不一样有的是美工，有的是动漫设计，只有2，3个是web方向，却是.NET的。<br />  问题是如何让他们在短期内能够进入角色能同步进行项目开发呢？目前技术选型采用struts1.3+spring2.0+hibernate3.0结构，前台可能采用ext，和prototype。估计javascript他们是更不了解<br />这种情况下要如何进行培训呢，而且培训的周期很短，只有一周。<br />  唉，头都大了。
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/216566#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 19 Jul 2008 19:41:01 +0800</pubDate>
        <link>http://www.javaeye.com/topic/216566</link>
        <guid>http://www.javaeye.com/topic/216566</guid>
      </item>
      <item>
        <title>PropertyGrid表格样式</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://todayapple.javaeye.com">todayapple</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219521" style="color:red;">http://www.javaeye.com/topic/219521</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><br />&lt;html><br />&lt;head><br />   &lt;title> New Document &lt;/title><br />    &lt;link rel="stylesheet" type="text/css" href="resources/css/ext-all.css" /> <br />    &lt;script type="text/javascript" src="adapter/ext/ext-base.js">&lt;/script><br />    &lt;script type="text/javascript" src="ext-all.js">&lt;/script><br />&lt;/head><br /><br />&lt;body><br /><br />&lt;br><br />  &lt;script><br /> <br /> Ext.onReady(function(){<br /><br />	//定义表格<br />	 var grid = new Ext.grid.PropertyGrid({<br />		title:'属性表格',<br />		renderTo: 'grid',<br />		width:300,<br />		autoHeight: true,<br />		source: {<br />			"名字":"张三",<br />			"创建时间":new Date(Date.parse('12/15/2007')),<br />			"是否有效":false,<br />			"版本号": .01,<br />			"描述":"descn"<br /><br />		}<br />		<br />	});<br />		<br />		//可选的。用来控制VALUE是不是可修改的<br />		grid.on("beforeedit",function(e) {<br />			e.cancel = true;<br />			return false;<br />		});<br />				<br />	});<br /><br /><br />		//为了取消NAME那一列的默认排序<br />		Ext.grid.PropertyGrid.prototype.initComponent = function () {<br />			this.customEditors = this.customEditors || {};<br />			this.lastEditRow = null;<br />			var store = new Ext.grid.PropertyStore(this);<br />			this.propStore = store;<br />			var cm = new Ext.grid.PropertyColumnModel(this,store);<br />				// store.store.sort('name','ASC');<br />				this.addEvents(<br />					'beforepropertychange',<br />					'propertychange'<br />					);<br />				this.cm = cm;<br />				this.ds = store.store;<br />				Ext.grid.PropertyGrid.superclass.initComponent.call(this);<br /><br />				this.selModel.on('beforecellselect',function(sm,rowIndex,colIndex) {<br />					if(colIndex == 0) {<br />						this.startEditing.defer(200,this, [rowIndex,1]);<br />						return false;<br />					}<br />				},this);<br />				};<br />	<br />    &lt;/script><br />    <br />	<br />	&lt;table border="1" align="center"><br />		&lt;tr><br />			&lt;td>&lt;font color="red">PropertyGrid表格样式如下：&lt;/font>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;div id="grid" >	&lt;/div>&lt;/td><br />		&lt;/tr><br />		&lt;tr><br />			&lt;td>&lt;input type="submit" id="remove" value="提交内容"/>&lt;/td><br />		&lt;/tr><br /><br />	&lt;/table><br />&lt;/body><br />&lt;/html>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219521#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:42:20 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219521</link>
        <guid>http://www.javaeye.com/topic/219521</guid>
      </item>
      <item>
        <title>把业务逻辑从存储过程中拿出来－－性能优化实例</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://hyhongyong.javaeye.com">hyhongyong</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219371" style="color:red;">http://www.javaeye.com/topic/219371</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          对于业务逻辑放在存储过程中的情况，目前比较有市场的看法是：  “不要把业务逻辑放在DB中，除非有性能问题” <br />
日前，我却遇到另外一种情况： <br />

首先说一下业务（简化过的）： <br />

酒店预订系统，酒店是按天计算价格的，酒店合同价格是按时间段的，后录的合同如果时间上与原来的重合，则使用后录合同的价格。 <br />

现在的问题是从酒店合同价格计算预订时间段内的价格。主要有三个步骤： <br />

1.分割：把合同价格的时间段按天分割到每天的价格 <br />

2.选择：选择每天上比较后录的合同的价格 <br />

3.归并：按价格相同与否，将每天的价格归并成时间段 <br />

之前是用存储过程做的。（因为这样会减少网络传输），而且不是一个存储过程，因为不同的价格计算条件和方式有一些微小的差别。 <br />

很不幸，业务有变化了，这些存储过程都要改动，而且目前有了一些性能方面的问题： <br />

我们的DB是用的oracle 10 的RAC，AP服务器用的是weblogic 8 集群。在计算所有酒店的一天价格时，用存储过程要10多分钟。如果计算多几天的价格，则会因为存储过程时间过长，造成AP报timeout。 <br />


为了应对业务的变化（也因为有了这些变化，才敢有以下的做法），也为了解决性能问题，我决定把这些业务逻辑从DB中移出来，放在程序中去。我们用面向对象的方法进行分析和设计，用若干业务领域类以及持久化DAO代替了这些存储过程。用了大约2个人月的时间，完成上线了。 计算一天价格的时间下降到3分钟，仔细检查了一下，业务接口中有个地方可以优化。优化后，计算一天价格的时间下降到不足一分钟了，多天的价格计算也可以进行了！ <br />


总结一下这次过程： <br />

1、存储过程处理的过程复杂时，性能未必好！ <br />

2、程序中也有很多地方是可以优化的。 <br />

3、面向对象的程序应对业务逻辑的变化，有时比存储过程还要好！ <br />


          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219371#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 10:29:26 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219371</link>
        <guid>http://www.javaeye.com/topic/219371</guid>
      </item>
      <item>
        <title>求教于前辈们</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://chenpingtai2008.javaeye.com">chenpingtai2008</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/217320" style="color:red;">http://www.javaeye.com/topic/217320</a>&nbsp;
          发表时间: 2008年07月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <span style="font-size: large">本人下学期大四了，在10月份就要面临的招聘会，现在有点迷茫，迷茫的是这段时间到10月份该干点什么。先说下本人的情况吧，本人会的有struts1.x,hibernate,spring,webwork,javascprit,jsp/servlet,ext,dwr.这些技术不算熟，因为不经常写代码。但理论大致上都能掌握，基本上都能知道怎么应用，用起来应该也比较容易上手。现在想请教一下各位师兄，长辈，对于应届毕业生的项目经验这块是怎么看的，是不是缺少这东西，竞争力将会大大折扣。<br />我认识的周围的一些大四的已经签了工作了的一些朋友，他们刚刚从培训学校出来后没多久就签了，也并没有项目经验。还有各位招人的hr们觉的培训学校里面的实习做的那些东西，你们看重这样的经验吗？？？<br />我现在在看java编程思想，以及数据结构这方面的书，打算打好基础（如果你们还有什么好的书请给点建议，本人感激不尽），我不是计算机专业的（数学的）。不知道，现在是应该停下来去做点东西出来以备招聘的时候用，还是继续看这样的书，可能有人会建议一边做东西，一边看这些书，但是我觉的有点忙不过来，比如象java编程思想就很厚，看完也要花很长时间，做东西也要花比较长时间。觉的两者总是不能兼顾，两者兼顾的话总有一样忙不好，本人找工作家里给的压力比较大（跟家境有关），所以很希望下学期招聘会就能把自己卖出去。请各位兄长，前辈们给点建议，给我点指导。还有如果你们有什么好东西，可以给我油箱里发<br />chenpingtai2005@163.com.谢谢你们！！！</span>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/217320#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 20:12:10 +0800</pubDate>
        <link>http://www.javaeye.com/topic/217320</link>
        <guid>http://www.javaeye.com/topic/217320</guid>
      </item>
      <item>
        <title>我的面试经历</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://bengan.javaeye.com">bengan</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/216775" style="color:red;">http://www.javaeye.com/topic/216775</a>&nbsp;
          发表时间: 2008年07月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>近段时间想换份工作，原来的单位是一家工厂it部3个人包括我负责工厂的erp(其实也不知道是不是erp，只是一堆有点联系管理系统)开发和维护。做了1年了感觉在那里不是一个长远呆下去的地方因为我不想一背子对着一个系统。在网上看到一家hk电信上市的子公司开我们城市开了一个分公司请开发的（ssh+jsf+ajax+oracle+linux），象发现新大陆一样马上就发了简历，凭着5年的工作经验和对以上技术有点了解（现在做的就是ssh、ajax，oracle3年前也用过8i、9i，linux就比较生疏只配过几次开发环境）还有信心可以去面试。</p>
<p>&nbsp;</p>
<p>结果简历发去出一个月了也没有回音想要放弃了，但是在第5周接到了面试通知，感觉机会来了。在预定的时候去了面试，见面的只是一个人事部的美女一看就有点hk人的味道。填了一份表格，连毕业证书也没叫我拿来看看就给了一份题目我做。一看题目全是english就有点傻了，幸好定下心来还是70%看得懂（题目都很短，都是选择题）。内容都是比较基础的问题，关于treeset、jsp内建对象的、oracle基础语句的、设计模型的、ajax的等等都是很基础的。做了几道一时间明白了什么叫&ldquo;浅水淹死人&rdquo;。做完之后只记得treeset的不懂、oracle的&ldquo;||&rdquo;符号忘记什么意思了、设计模型的不会没选。最后和hr小姐聊了几句，她只是问了我现在的工作情况。印象最深的是她问&ldquo;你现在的公司是台资企业，人家都说台资制度最苛刻，你感觉怎么样？&rdquo;我回答：&ldquo;其实进去的时候就看过员工手册里面都有规定的，只要原来规定了不是随便莽加的自己就可以接受都可以遵守！&rdquo;她点点头笑了一下，这样第一次面试结束了她说会在1周内给电话通知下一次hk派技术人员来面试。走的时候感觉希望不大了，因为感觉题目做得不好。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>过了5天竟然接到了3天后面试的电话通知，一时间有点紧张了（我比较在乎这份工作，毕竟是上市公司想进去见识一下）。这几天就拼命的啃书，上网找面试题目。hibernate的1：n、n：n，spring的ioc、aop、struts的基础知识oracle基础语句等等都看了一下，终于到了面试的时候了。</p>
<p>&nbsp;</p>
<p>见面在一个会议室一老一少标准的hk人的味道尤其是那个年长的，一坐下就叫我自我介绍一下。我就把这几年做过的几家公司和我做过的一些项目的情况介绍了一遍。在我介绍的时候他们会不时提问我一些细节，例如在设计数据库的时候&ldquo;你有用什么方法或者什么工具帮忙设计还是凭直觉？&rdquo;。听了被他吓了一下想了想回答：&ldquo;现在没有用到什么工具，但是我知道可以用user case、uml图之类的帮忙，只是我觉得自己在这些技术上掌握得还不是很好没用到。但是不能说凭直觉去设计应该是经验+直觉吧！毕竟现在做项目的时候很少一下就设计几十个表都是3、4个表累加起来的，经验+直觉可以应付得了而且效率也高。&rdquo;。看了他的表情感觉他也满意我的回答。&ldquo;在什么情况下你会对数据库添加表格？在什么情况下决定用存储过程？&rdquo;，我回答&ldquo;先看当前数据库里的数据是否满足新的应用如果满足就不加，没有的就加。尽量不添加表格，但是如果添加表格对系统的性能或者维护性有好处的也可以添加。至于是否使用存储过程主要看效率的要求吧，但是尽量不使用存储过程，因为他的可维护性没有java代码强。&rdquo;他听了好象也满意。还问和很多问题例如你现在的工作流程是怎么样的？是怎么做需求分析？你现在做的系统的处理流程是怎么样的（其实就ssh的工作流程）？都是一些比较宏观的问题基本没有问到技术细节。说了一个多小时我每回答一个问题他们都回在我填写的简历上记录一些东西（很想看他们写了什么就是看不到）。临做的时候最后问了我两个问题也是最难的&ldquo;如果日后办公都是english的办公环境例如公司内部的email都是用english和hk联系的，你认为你要用多长时间可以适应呢？你有毕业成绩单吗？&rdquo;我傻了硬着头皮说&ldquo;english的话可能要6个月到1年时间去适应（当年4级40多分的水平能用这个时间去适应我觉得我成功了。）。5年前的毕业成绩单可能找不到了只能回去找找看！&rdquo;</p>
<p>&nbsp;</p>
<p>这样面试结束了，如果没有最后的两个问题我感觉我一定可以被录取可惜.......前两天hr小姐真的给电话问我要成绩单了。但是我真的找不到只能直接回复说没有了，她说要告诉hk的同事看怎么处理了。我多问了两句她就回我说你笔试和面试都基本没有什么问题，就因为你不是计算机毕业的想了解一下你学过的计算机课程。听了半喜半悲，正常情况下笔试和面试过了应该就没问题了，但是没有成绩单也存在变数。有可能他们是新公司新团队想要成绩好的新人培养，总之一天没电话来说我被录取了就不安心。希望能有一个好的结果，好让老婆和快出生的孩子过上好一点的生活！</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/216775#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 02:42:49 +0800</pubDate>
        <link>http://www.javaeye.com/topic/216775</link>
        <guid>http://www.javaeye.com/topic/216775</guid>
      </item>
      <item>
        <title>收集了两个算法题</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xxg.javaeye.com">txxg</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219512" style="color:red;">http://www.javaeye.com/topic/219512</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>1，用一个表达式将一个字母转换为大写<br />给定的字符是字母，大小写不定<br />不能用 三目运算 ？： </p>
<p>char cSrc='C'; </p>
<p>&nbsp;</p>
<p>答：&nbsp;&nbsp;&nbsp;cSrc = (char)(cSrc&amp;~32); (转为小写：cSrc = (char)(cSrc|32);) 或者</p>
<p>cSrc = (char) ((cSrc - 'A') % 32 + 'A');</p>
<p>（哪位解释下为什么可以这样算呢cSrc = (char)(cSrc&amp;~32);）</p>
<p>&nbsp;</p>
<p>2，判断一个正整数是否是2的整次幂</p>
<p>&nbsp;</p>
<p>int iSrc = 4096;</p>
<p>&nbsp;</p>
<p>答：return (iSrc&amp;-iSrc)==iSrc&nbsp; 或者</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (iSrc&amp;(iSrc-1))==0&nbsp; </p>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219512#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:24:14 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219512</link>
        <guid>http://www.javaeye.com/topic/219512</guid>
      </item>
      <item>
        <title>tiles框架竟会对cookie产生影响</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://geng2483759.javaeye.com">geng2483759</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219510" style="color:red;">http://www.javaeye.com/topic/219510</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近在整一个sso的东西， 发现tiles的一个问题<br /><pre name="code" class="java">	
  &lt;definition name=".layout" path="/jsp/layout.jsp">
        &lt;put name="messages" value="/jsp/messages.jsp"/>
        &lt;put name="main" value="${main}"/>
  &lt;/definition>


    &lt;definition name=".cookie" extends=".layout">
    	&lt;put name="main" value="/jsp/cookie.jsp"/>
    &lt;/definition>

</pre><br /><br />好了，如果我在cookie.jsp 写如下， 没有任何用处，<br /><br /><pre name="code" class="java">
Cookie cookie = new Cookie("userid", "javaeye");	
cookie.setMaxAge(-1); 
cookie.setDomain(".myDomain.com");
cookie.setPath("/");
response.addCookie(cookie);

</pre><br /><br />我就奇了怪了，于是在action里面写了这些代码，forward过去，成功。<br /><br />我就更加奇了怪了，折腾半天，最后发现如果在layout.jsp里写这些代码也是能成功的。<br /><br />难道tiles框架还有这样神奇的功能。有哥们过来帮分析下吗？
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219510#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 14:19:02 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219510</link>
        <guid>http://www.javaeye.com/topic/219510</guid>
      </item>
      <item>
        <title>你当老板,招聘员工,是要孙悟空还是猪八戒?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://adali.javaeye.com">ada_li_li</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/216902" style="color:red;">http://www.javaeye.com/topic/216902</a>&nbsp;
          发表时间: 2008年07月21日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这是从Judy的问题<a href="http://www.javaeye.com/topic/216753" target="_blank">http://www.javaeye.com/topic/216753</a>引申过来的.<br /><br />中央二台做过一个节目, 马云(阿里巴巴)对阵李彦宏(百度), 在选择什么样的员工上,两人态度截然相反. 没看过的可以猜猜两人的选择.<br /><br />我选孙悟空,并因此对其中一个企业有了些看法,如果它的用人观是如CEO宣扬的那样.
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/216902#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 21 Jul 2008 14:18:21 +0800</pubDate>
        <link>http://www.javaeye.com/topic/216902</link>
        <guid>http://www.javaeye.com/topic/216902</guid>
      </item>
      <item>
        <title>说说最近北京的工资行情</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://happydays.javaeye.com">HappyDays</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218373" style="color:red;">http://www.javaeye.com/topic/218373</a>&nbsp;
          发表时间: 2008年07月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近一段时间在找工作，先说说本人的基本情况，一年工作经验，自认为工作能力较强，无聊的时候也研究技术，会的东西有:ajax,struts,webwork,spring,hibernate，一共面试过三家。<br /><br />第一家：笔试之后（笔试题很简单），人事部的问我工资要多少，我说4500~5000，人家听了之后说这次只是初试，还有复试，让我先回去等消息，然后就没有下文了。<br /><br />第二家：问我要多少，这次我要的低了点，说4500,对方说，你要的薪金我们达不到，我就问他，那你最多能给多少，他说，3000，还说现在行情就是这样，你有几年工作经验就给你几年的工资，本科生刚毕业时三千，一年后能达到3500<br /><br />第三家：这次我要的更低，4000，对方说超出他的预算了，现在北京的工资行情都是很虚的，说他们能给3200+午餐补助=3500<br />难道上面两家的说的行情是真的吗！！！？？？？？？
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218373#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 21:10:15 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218373</link>
        <guid>http://www.javaeye.com/topic/218373</guid>
      </item>
      <item>
        <title>应聘者与面试官是平等的</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://roger51.javaeye.com">roger51</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218752" style="color:red;">http://www.javaeye.com/topic/218752</a>&nbsp;
          发表时间: 2008年07月23日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          书接上文：<br />    在整个应聘与面试得过程中双方都是平等的。<br />    之前好像也总看到很多人在网上发些文章来发泄下面试过程中的尴尬，对于我个人而言虽然我不是作hr的，但是基本得礼貌和尊重还是必须要注重的，这样才会形成一个良好得面试氛围也可以让面试者轻松随意些，<br />    一般我会划分两种人：<br />1，技术不怎么好得，在面试得过程中根本说不明白自己之前作过的东西，应用过的技术及应用到技术的基本内容的，在面试得过程中心里大概就会有个数，如果是感觉不行就会在整个过程在保持愉悦的气氛，人大家都比较舒服，不会给对方照成太大得心里压力或难堪的事情，至少不会让对方感觉到浪费了八毛钱路费钱出门就骂这家公司，同时也会暗示对方你以后需要注意什么，如果提高自己的内功。<br />2，对于技术感觉不错的人，我会比较庄重使整个过程都在平稳的环境中进行，然后将应聘者报告给hr，报告给总经理，在进行复试<br />3，最后我都会说如果您有什么问题想问我，或者通过我想了解我们公司的问题，您都可以问我，我能回答您的我都会回答您，如果不能回答我会找合适的人回答您的问题。<br />4，应聘者也应该根据不同的时间不同的问题，选择不同的回答方式，方法与技巧，
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218752#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jul 2008 21:44:21 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218752</link>
        <guid>http://www.javaeye.com/topic/218752</guid>
      </item>
      <item>
        <title>各位在处理大数据量的重复问题上有什么好的解决办法?</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://lsk.javaeye.com">lsk</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219376" style="color:red;">http://www.javaeye.com/topic/219376</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          新接手到一个数据库.数据库当中都是一些资讯的内容.有标题.正文.分类等等.大约有70多W行记录了.<br />数据库中有很多重复添加的内容,有些是标题一样或者类似,而有些则是内容一样.<br />  我现在有两种想法来处理这个问题: <br />  1,借助搜索引擎.比如Lucene来处理.(不知道搜索引擎的分词有没有这方面的功能)<br />  2,就是自己写个程序来Match标题.或者内容(但是效率和准确度都是问题)<br /><br />  想问一下各位 javaeyer 有没有碰见过这类的问题,如何实施?
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219376#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 10:47:38 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219376</link>
        <guid>http://www.javaeye.com/topic/219376</guid>
      </item>
      <item>
        <title>extJs和javaEE</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sam-zhang.javaeye.com">andrew.yulong</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219497" style="color:red;">http://www.javaeye.com/topic/219497</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p>&nbsp; 一直想写个extjs和javaee具体怎么集成的例子.但是太懒了,公司的事情又狠多,一直不想敲键盘.但鉴于下个星期就要开始搞ror了,所以还是决定写一篇,一来可以让更多的新手少走弯路(其实我也是新手),而来以后可以温习温习.孔子都说温固而知新.</p>
<p>先描述一下这个例子吧,前台当然是用ext了,也用到了dwr,后台嘛就是现在最流行的框架组合吧.(马上就要告别他们了),struts2,hibernate3,spring2.数据库oracle,不过用什么都无所谓了.例子的功能就是一个表的增删改查吧.</p>
<p>&nbsp; 首先我喜欢从pojo开始写起.</p>
<p>&nbsp;</p>
<pre name="code" class="java">package com.andrew.model;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * 主键
	 */
	private Long id;

	/**
	 * 用户名
	 */
	private String username;

	/**
	 * 密码
	 */
	private String password;

	/**
	 * 生日
	 */
	private Date btd;

	/**
	 * 简历 对应数据库中的colb字段 
	 * 要注意几个位置
	 * 1. 确定你用的oracle驱动是10g的
	 * 2. 在模型对应hbm文件映射type=&quot;text&quot;
	 * 3. 在hibernate的配置信息里加上hibernate.connection.SetBigStringTryClob=true
	 * 这样一来数据库的colb字段就映射到了string,读写操作和string一样
	 */
	private String resume;

	public Date getBtd() {
		return btd;
	}

	public void setBtd(Date btd) {
		this.btd = btd;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getPassword() {
		return password;
	}

	public void setPassword(String password) {
		this.password = password;
	}

	public String getResume() {
		return resume;
	}

	public void setResume(String resume) {
		this.resume = resume;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

}
</pre>
<p>&nbsp;pojo写完了开始写hbm.xml</p>
<pre name="code" class="xml">&lt;?xml version=&quot;1.0&quot; encoding='UTF-8'?&gt;
&lt;!DOCTYPE hibernate-mapping PUBLIC
                            &quot;-//Hibernate/Hibernate Mapping DTD 3.0//EN&quot;
                            &quot;http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd&quot; &gt;

&lt;hibernate-mapping package=&quot;com.andrew.model&quot;&gt;
    &lt;class name=&quot;User&quot; table=&quot;USERS&quot;&gt;
        &lt;id name=&quot;id&quot; column=&quot;ID&quot; type=&quot;java.lang.Long&quot;&gt;
            &lt;generator class=&quot;native&quot;/&gt;
        &lt;/id&gt;
        &lt;property name=&quot;username&quot; column=&quot;USERNAME&quot; type=&quot;java.lang.Long&quot;  not-null=&quot;true&quot; /&gt;
        &lt;property name=&quot;password&quot; column=&quot;PASSWORD&quot; type=&quot;java.lang.Long&quot;  not-null=&quot;true&quot; /&gt;
	&lt;property name=&quot;btd&quot; column=&quot;BTD&quot; type=&quot;Date&quot;  not-null=&quot;true&quot; /&gt;
	&lt;property name=&quot;resume&quot; column=&quot;RESUME&quot; type=&quot;text&quot; /&gt;
    &lt;/class&gt;
&lt;/hibernate-mapping&gt;</pre>
<p>&nbsp;OK,接下来是什么?你们猜猜,答案是DAO,dao的实现就不写了啊.(偷懒- -!!!)</p>
<pre name="code" class="java">public interface IUserDao{
      /**
	 * 分页的方法
	 * @param start
	 * @param limit
	 * @return
	 */
	public List&lt;User&gt; loadUser(String start,String limit);
	
	/**
	 * 保存
	 * @param bean
	 */
	public void saveBean(User bean);
	
	/**
	 * 修改
	 * @param bean
	 */
	public void updateBean(User bean);
	
	/**
	 * 删除
	 * @param bean
	 */
	public void deleteBean(User bean);

}
</pre>
<p>&nbsp;然后是service,这里没有什么业务逻辑,所以大家把daocopy到service里面去就可以了,这里也不写出来了哦...,这与spring的配置文件,我想也不用多写吧,都是写熟了copy的东西.想要的话在告诉我.</p>
<p>接下来我们直接来写action.</p>
<p>&nbsp; 大家想想useraction里面都需要写什么</p>
<p>&nbsp; 1.首先需要一个service的对象这个是肯定的</p>
<p>&nbsp; 2.需要一个list来存放结果集</p>
<p>&nbsp; 3,还需要一个user的实例</p>
<p>&nbsp; 4.一个tota来存放总的记录集数</p>
<p>&nbsp; 5.一个start来存放从第多少条开始查</p>
<p>&nbsp; 6.一个limit来存放要查到多少条</p>
<p>&nbsp; 7.其实上面的东西可以封装起来,写个baseaction,在让你的action继承,这样就不用每个都写这多东西了</p>
<p>......先这多吧,等下在继续...待续......</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219497#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 13:48:18 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219497</link>
        <guid>http://www.javaeye.com/topic/219497</guid>
      </item>
      <item>
        <title>希望大家能帮帮忙 赐教一下</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://nishi2b.javaeye.com">nishi2b</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218819" style="color:red;">http://www.javaeye.com/topic/218819</a>&nbsp;
          发表时间: 2008年07月24日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          第二次来上海了 第一次来上海的时候是5 1 来的 为的是旅游也就没怎么用心找工作 可是简历投出去却没有一个电话打过来 让人觉得心冷 我觉得似乎是简历出了问题 希望 eye的朋友们帮忙点一下 我觉得是不是项目经验填写的不够详细？希望能帮帮  举个例子也好  还有 这个简历 我应该怎么要价？ 谢谢 <br /><br />xxx男 ¦ 未婚 ¦ 1986 年7月生 ¦ 户口：黑龙江xxx ¦ 现居住于上海 <br />2年工作经验 ¦ 无党派人士 ¦ 身份证： xxxxxxxxxxxxx <br /><br />xxxxxxxxx(手机) <br />E-mail: woshixiaobao1@sina.com 求职意向 <br />期望工作性质： 全职、兼职 <br />期望从事职业： 计算机软、硬件/互联网/IT <br />期望从事行业： 计算机软件、互联网/电子商务、网络游戏、IT服务（系统/数据/维护）/多领域经营 <br />期望工作地区： 上海 <br />期望月薪： 4001-6000元/月 <br />目前状况： 我目前处于离职状态，可立即上岗 <br /><br />自我评价 <br />年轻,学习能力强,对编程充满热情,沉稳,工作严谨,有良好的代码和书写文档习惯. <br /><br />2年JAVA应用软件编程经验。 <br />精通JAVA语言和Servlet <br />熟练使用Oracle SqlServlet数据库 <br />可熟练使用 webwork hibernate ext2.0等流行框架编程。 <br /><br />可以适应长期出差 加班。 <br /><br />工作经历 <br />2006/04 -- 2008/06： xxxxxxxxx ¦ 研发部 ¦ 软件工程师 <br />计算机软件 ¦ 民营 ¦ 规模:100-499人 ¦ 2001-4000元/月 <br />负责新技术的学习，传授。负责在公司项目负责人指导下，完成项目模块的分析，设计，编码工作。 <br /><br /><br />项目经验 <br />2008/01 -- 2008/06：信息网络运行管理系统 <br />软件环境：ext2.0+jdk5.0 <br />责任描述：负责设备运行信息监控的编写； <br />负责同技术经理在其原ext1.1的基础上学习EXT2.0的应用， <br />并传授组内其他技术人员。项目描述：xxxxxx信息中心网络运行管理系统监控。 <br />主要负责信息网络设备的监控，管理和维护。 <br /><br />2007/05 -- 2007/12：xxxxxxxxxOA软件 <br />软件环境：webwork+hibernate+spring <br />责任描述：负责其中计算机图书管理。文件管理和审批流，电子签章的开发。 <br />档案管理采用jasper+ireport.项目描述：xxxxxxxxxOA 二次开发。 <br /><br />2006/09 -- 2007/03：xxxxxxxx社保基金下属（xxxxxxxxxxx工伤保险管理信息平台系统） <br />软件环境：webwork+hibernate+spring <br />责任描述：主要负责保险基金收缴管理模块的开发. <br />负责组内技术故障处理和线程安全问题管理。项目描述：主要是针对xxxxxxxxx社会保险事业管理局及其下属社会保险分局做的内部管理系统. <br /><br />2006/03 -- 2006/08：xxxxx网 <br />软件环境：JSP+Servlet+Bean SqlServer <br />开发工具：eclipse3.1 <br />责任描述：主要负责酒店预定模块，景区模块的程序开发。 <br />在此项目中学习使用了 cache和连接池技术.项目描述：主要应用于在线旅游网站，功能类似携程网。主要负责旅游同业和酒店预定。 <br />www.xxxxx.com <br />教育经历 <br />2003/07 -- 2007/07：吉林大学 ¦ 计算机科学技术 ¦ 本科 <br />语言能力 <br />英语：读写能力一般 ¦ 听说能力一般 <br />专业技能 <br />ext ¦ 良好 ¦ 3个月 <br />xml ¦ 良好 ¦ 12个月 <br />.NET ¦ 一般 ¦ 2个月 <br />Oracle ¦ 良好 ¦ 6个月 <br />Sql Server ¦ 熟练 ¦ 24个月 <br />Linux ¦ 一般 ¦ 4个月 <br />JAVA ¦ 精通 ¦ 30个月 <br />J2EE ¦ 熟练 ¦ 24个月 <br />兴趣爱好 <br />烹饪，网络，读书，篮球
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218819#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jul 2008 08:55:06 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218819</link>
        <guid>http://www.javaeye.com/topic/218819</guid>
      </item>
      <item>
        <title>Project euler上的题目，帮忙看看</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://danielyou.javaeye.com">akfucc</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219477" style="color:red;">http://www.javaeye.com/topic/219477</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          题目如下（problem 108）：<br />In the following equation x, y, and n are positive integers.<br />1/x + 1/y = 1/n<br /><br />For n = 4 there are exactly three distinct solutions:<br />1/5 + 1/20 = 1/6 + 1/12 = 1/8 + 1/8 =1/4<br /><br />1. What is the least value of n for which the number of distinct solutions exceeds 1000?<br />2. What is the least value of n for which the number of distinct solutions exceeds 4,000,000?<br /><br />我原来的思路：<br />设0&lt;x&lt;=y，由等式可求出x的范围为<br />n &lt; x &lt;= 2n<br />y = nx / (x - n)<br /><br />循环遍历x，如果nx % (x-n) == 0<br />则说明有一个解成立<br /><br />但这样的解法，太耗时间了，第1问就已经花了我较长时间，第1问的答案为180180<br /><br />我觉得似乎和n的因子有关，但研究了两个晚上没有头绪<br /><br />主要代码如下：<br /><pre name="code" class="java">
	/**
	 * 1/x + 1/y = 1/n
	 * 
	 * x &lt;= y
	 * 
	 * n &lt;= x &lt;= 2n
	 * 
	 * y = (x*n)/(x-n)
	 */
	public static int solution(long n) {
		int count = 0;
		for (long x = n + 1; x &lt;= 2 * n; x++) {
			if ((x * n) % (x - n) == 0) {
				count++;
			}
		}
		return count;
	}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219477#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 13:11:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219477</link>
        <guid>http://www.javaeye.com/topic/219477</guid>
      </item>
      <item>
        <title>GT-Grid最新版本+ 与服务端结合的示例 (08年7月24日更新)</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fins.javaeye.com">fins</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219217" style="color:red;">http://www.javaeye.com/topic/219217</a>&nbsp;
          发表时间: 2008年07月24日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <a href="http://fins.javaeye.com/blog/214290" target="_blank">http://fins.javaeye.com/blog/214290</a> 里面的内容太多了<br />决定另起一篇来发布.<br /><br />这个是 GT-Grid 的最新版本  + 与后台结合的例子<br /><br />如果只对 gt-grid 感兴趣<br />可以只关注 包中gtdemo\WebContent\gt-grid 下的内容<br />另外 大家注意一下  里面的这个文件 user_document.txt<br /><br />虽然还很粗糙 但是 比以前已经完善了很多 ,已经可以作为一个简单的参考了<br /><br />==========================================<br /><br />这个例子 主要演示了 gt-grid与后台结合的方法. <br />请大家重点看action 里是如何从客户端取数据 以及如何向客户端送数据的 <br /><br />而其他地方 例如action如何实现的 , dao层是如何实现的 等等不是大家要看的重点. <br /><br />dao层只要能返回一个 数据集合 并且这个集合能够转换成json字符串 <br />那么dao层怎么实现 完全按你自己的意愿来. <br /><br />这个示例中提供了一个 GridServerHandler的工具类, 建议看看这个类的实现方法 <br />这样能更好的理解 gt-grid和后台交互的方式以及原理. <br /> <br />整个示例的后台代码 我没有使用任何第三方框架 所以难免粗糙 还请大家海涵. <br /><br />========================================== <br /><br />运行步骤 <br />1 部署后, 运行 startdb.bat 启动数据库 <br />* h2manager.bat是一个h2db提供的数据库管理程序. <br /><br />2 启动web应用 <br />3 在浏览器里输入 http://127.0.0.1:8080/gtdemo/index.do <br />(地址根据实际情况而定),进入"示例列表"页面 <br /><br />4 点击那个 列表里的 第一项的 链接 , <br />之后会进入第一个也是目前为止唯一一个和后台结合的示例页面 <br /><br />5 然后就可以对列表进行 增删改 等操作. <br /><br />============================================= <br /><img src="http://fins.javaeye.com/blog/219217" /><br /><br />注意: 附件并不是一个直接部署的war包 而是一个eclipse项目 <br /><br />不过我相信有经验的朋友可以很轻易的就部署成功
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219217#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Jul 2008 20:42:12 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219217</link>
        <guid>http://www.javaeye.com/topic/219217</guid>
      </item>
      <item>
        <title>广州Java开发工作, 基本工资4000元/月</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhanjia.javaeye.com">zhanjia</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219436" style="color:red;">http://www.javaeye.com/topic/219436</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          个人工作经验一年, 新公司给最高是4000元/月, 有餐补和通讯费, 大概是3~4百元/月.<br />社保和公积金说是按广州最高标准来缴纳, 说有项目奖金(这个很多公司都说说而已).<br />SSH方面的开发工作, 面向电信方面.<br />说要赶紧回复, 犹豫中啊!!!<br />大家给个建议或评价吧?
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219436#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 12:30:11 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219436</link>
        <guid>http://www.javaeye.com/topic/219436</guid>
      </item>
      <item>
        <title>lua扩展模块里面如何申请内存</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://mryufeng.javaeye.com">mryufeng</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219439" style="color:red;">http://www.javaeye.com/topic/219439</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          我们在编写lua模块的时候经常会遇到申请内存的情况，有2中用途 1。 临时的 2. 长期的。 通常我们是用malloc来分配内存 free来释放。但是这样做的话 lua runtime就没有办法跟踪内存的使用。但是我们有解决方法：<br />1. 临时的 通过LuaL_Buffer来， 因为LuaL_buffer有自主扩展能力，所以我们可以存入很多数据 只是每次可以直接使用buffer的大小有限制。<br />2. 长期的, 通过lua_newuserdata 放在fenv里面. fenv 是个table,而且可以gc. 当分配的内存不够用的时候 可以重新分配一个 然后lua_replace一下 这样旧的内存就会被gc掉。 <br /><br />Note: Lpeg的代码实现很精致 可以精读。
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/219439#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Jul 2008 12:35:54 +0800</pubDate>
        <link>http://www.javaeye.com/topic/219439</link>
        <guid>http://www.javaeye.com/topic/219439</guid>
      </item>
      <item>
        <title>翻译：敏捷与CMMI：双剑合璧，更具威力！</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://movingboy.javaeye.com">movingboy</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/218142" style="color:red;">http://www.javaeye.com/topic/218142</a>&nbsp;
          发表时间: 2008年07月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          记得在JavaEye曾经有过关于敏捷与CMM之间的激烈讨论，但讨论后似乎没有谁认为对方已经说服了自己。因为我没有CMM方面的实际经验，我对CMM的了解仅限于教材、SEI网站上的电子文档和各个论坛的讨论，我只能作壁上观。不过那时我有一种朦朦胧胧的感觉：敏捷与CMM似乎并不是绝对对立的，但我无法说清楚为什么。<br /><br />在Scrum Alliance的网站上看到Cindy Shelton写的一篇文章：Agile and CMMI: Better Together（<a href="http://www.scrumalliance.org/articles/100-agile-and-cmmi-better-together" target="_blank">http://www.scrumalliance.org/articles/100-agile-and-cmmi-better-together</a>）。文章中的观点让我有些共鸣，所以不辞冒昧，翻译了出来，希望能给大家一点启发。<br /><br />因为自己的英语水平有限，翻译的过程中深感不易。原文中许多习惯用语没找到非常贴切的中文说法，某些段落的上下文也不容易理解。许多地方我按照自己的理解进行了意译，但我有点担心是否正确地表达了原文的意思，因此有兴趣对这篇文章深入了解的朋友请阅读原文。<br /><br /><strong><span style="font-size: x-large">敏捷与CMMI：双剑合璧，更具威力！</span></strong><br /><br />在追求卓越的过程中，组织会尝试多种途经，采用不同的原则、方法及技术。一个对敏捷实践感兴趣的组织可能也会对PMI的OPM3、ISO或能力成熟度模型集成（CMMI）感兴趣，因为这些都是通向卓越的手段。不过，我曾经看到一些组织同时尝试敏捷和PMI模型，但没有谁成功。实际上，去年我观察了两个很大的公司，它们主动在公司内同时采用敏捷与CMMI。在两家公司里，分别实施这两种方法的两个小组都把对方当作竞争对手，这令这两家公司严重受挫。（译注1）其实没必要这样子。CMMI与敏捷框架至少能够而且应该和平共处，甚至可能协同工作 - 我知道这对你们许多人来说是一种震动。<br /><br />许多人认为敏捷与CMMI是极端对立的，彼此抵消对方的成效。在传统方式与敏捷框架之间一直持续的论战中，各自的支持者纷纷列举出与对方水火不容的观点。但是这种对抗的态度不但毫无道理，也会对我们的工作-在尽可能短的时间内开发出高质量的软件-产生妨碍。想要获得最好的投资收益，最好是创建一组混合模型和方法，选择合适的技术来应对特定的挑战。<br /><br /><strong><span style="font-size: large">CMMI回顾</span></strong><br /><br />能力成熟度模型集成（CMMI）（注1）是一个过程改进方法，它为组织提供了实现高效的过程所必需的基本元素。它可以用来指导一个项目、一个部门甚至整个组织的过程改进。CMMI能帮助我们整合以往各自为政的组织功能，建立过程改进的目标与优先级，指导我们进行质量改进，还提供了评价现有过程的参照点。<br /><br /><img src="http://www.scrumalliance.org/system/resource_files/0000/0426/shelton_figure.jpg" /><br /><br />有趣的是，创建CMMI的初衷是为了应付一些软件开发相关的问题，而提出敏捷实践也是为了解决这些问题。在80年代早期，在SEI的资助下美国空军成立了一项研究来分析为什么许多软件合同都会超出工期和预算。他们的结论是：糟糕的过程。而另一方面，承包商认为无法按照预定的工期和预算完成合同的原因在于需求不断变更。研究中，为了在软件开发生命周期的后期应付这些变更而不增加返工，一个小组试图建立更多的过程，而另一个小组尝试应用不同的方法。这项研究一直持续到1998年，这一年，作为CMMI的补充，TSP诞生了。针对CMMI提出的“需要做什么”的目标，TSP指导团队“如何去做”，这加快了它的普及。但很多人忽视了敏捷实践也能指导我们“如何去做”。<br /><br />对新一代的敏捷实践者来说，CMMI似乎太臃肿、太枯燥、太缺乏创造性了。有人批评CMMI太官僚，过于关注过程而不是问题本身，削弱了应付日益严峻的需求变更的能力。同样，也有人批评敏捷对开发过程控制不力，导致隐性的变更和混乱。<br /><br />批评者还声称在CMMI提出的经典工程方法中，一些令项目成功的人类认知能力、组织及文化等方面的基本要素都没有考虑到。对于这些批评者（也是敏捷实践者）来说，从装配线式的过程模型中解脱出来，关注人与人的交流就是一种进步。Paulk (2001)（注2）更深入地探讨了为何这两种方法并非绝对冲突，并阐述了一个开发小组如何在遵循极限编程原则的同时拥抱CMM第3级。在第3级中，两种方法都可以衍生出不同的措施。Boehm and Turner（注3）强调不但要平衡地应用这两种方法相关的措施，而且要知道如何正确地应用才能显著改进组织的开发过程。<br /><br />CMMi提出，在组织中必须建立开发过程，必须采用同行评审来提高质量，必须有版本控制系统。如果我们发现一个跨国公司至今仍缺乏这些基本的“常识性”的控制手段，肯定不只我一个人会感到震惊和失望。如果能合理地应用两种方法中的原则、方法及技术，我们不至于陷入两难的境地。然而，要在现有的成熟度级别上同时应用敏捷，以及为敏捷团队找到最佳的成熟度级别都会是挑战。<br /><br /><strong><span style="font-size: large">实施敏捷的最佳时机</span></strong><br /><br />一项敏捷实践应该经过裁剪以适应组织实际的成熟度级别；特别是，如果组织的成熟度处于CMMI第3级，实施敏捷不但可以获得敏捷带来的重要好处，还可以减少返工，并全面提高推行CMMI的积极性。如果实施的软件开发过程既能遵循CMMI规范，又能符合敏捷原则，我们就可以真正获得CMMI提出的可重复性和可预测性的好处。敏捷特意设计得非常灵活，因此它可以在不违反敏捷宣言所规定的主要目标的前提下，裁剪为遵循CMMI规范的软件开发过程。<br /><br />当成熟度处于CMMI第3级，组织应该已经选定了适合团队及环境的过程，这些过程主要关注如何交付可正常运行的软件。此外，针对特定的项目，还要从组织的标准过程集中裁剪出相应的标准、过程描述及流程。因此，实施敏捷的主要工作就是为集成敏捷实践而修改那些标准过程。实施敏捷的风险集中在管理开销上，因为组织的管理模式可能会限制团队的自主决策权及灵活性。<br /><br /><strong><span style="font-size: large">在CMMI第3级上实施敏捷的挑战</span></strong><br /><br />如果成熟度未达CMMi第3级，说明组织缺乏稳定的项目管理、需求分析及配置管理相关的过程。正因为企业各个方面都缺乏训练，要实施敏捷还得提供缺失的软件开发过程。如果组织的成熟度未达CMMI第2级，过程常常会因为人为原因或外来事件而被迫改变。在这样的环境中，敏捷项目可能会成功，但成功的经验不见得能重用。如果组织没有一种稳定的环境，可能是因为组织还不清楚建立这样的环境需要哪些东西。这导致成功依赖于个人的专业知识、能力及英雄主义，而这些成效却可能被团队的其它因素抵消。<br /><br />CMMI第2级中的一些过程号称是可重复的，然而它们未必能在组织的所有项目中重用。实施敏捷实践和度量可以为组织提供达到CMMI第3级所需的管理架构和训练。在这一级，尽管实施敏捷可能导致成本增加，但也能获得与单独实施同样的好处。通过使用Burndown图和任务板，敏捷进度跟踪让组织很容易看到这种训练的效果，从而加快采用它的速度。敏捷框架的总体思想、方法及实践自然地解决了CMMI第2级的时间和成本超支的风险，能明显缩短提升到第3级的时间。我曾经成功地通过实施敏捷把成熟度级别从0提升到第2级，提高了客户满意度，最终达到了预期的效果。<br /><br />如果组织的成熟度高于第3级，流程已经基本可以在组织内通用了。这种情况下除非大幅改动那些在CMMI第4级中必需的成文的流程，否则敏捷所带来的灵活性将非常有限。其实，管理层希望能迅速找到合适的度量来控制项目的成本、进度与范围，而敏捷项目的进度已经是可视的，这与管理层的意图已经非常吻合了。此外，成熟度第3级与第4级之间的一个重大差别就是采用某组过程后的效果的可预测性：对于后者来说，过程的效果是通过统计及其它量化技术来控制的，可定量地预测。所以现在我还没兴趣在成熟度已达CMMI第4级的组织中推行敏捷。<br /><br /><strong><span style="font-size: large">结论</span></strong><br /><br />至此已经写了够多的内容来讲明CMM与敏捷实践之间的关系和协作效果。为了取得最好的效果，学习CMMI的各个过程域、各个成熟度级别并掌握如何在敏捷与CMMI之间过渡的能力非常重要。<br /><br />注：<br />1. 为了尽可能地准确，大多数关于CMMi的材料是从软件工程研究所（SEI）的网站（http://www.sei.cmu.edu/cmmi/）上照搬的。（译注2）其它来源的材料则单独说明。<br /><br />2. Paulk, 2001. M. Paulk, Extreme programming from a CMM perspective. IEEE Software 18 6 (2001), pp. 1–8.<br /><br />3. Boehm, B. and R. Turner (2003). Using Risk to Balance agile and Plan Driven Methods. Computer, IEEE Computer Society.<br /><br />译注：<br />1. 该句原文是I left both organizations frustrated.，我认为句首的I是It的笔误。因为我不是Scrum Alliance的会员，我没法跟帖或发邮件给作者求证。<br />2. 经过我的翻译，这些材料是否还能与SEI网站上提供的材料保持一致，需要各位朋友鉴别。
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/218142#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 15:42:32 +0800</pubDate>
        <link>http://www.javaeye.com/topic/218142</link>
        <guid>http://www.javaeye.com/topic/218142</guid>
      </item>
      <item>
        <title>In-Place-editing 下拉列表</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://43357564.javaeye.com">tes</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/217968" style="color:red;">http://www.javaeye.com/topic/217968</a>&nbsp;
          发表时间: 2008年07月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          rails自带In-Place文本编辑，但是我一直想弄一个In-Place的下拉列表前几天在看《Rails Recipes》的时候看见有这么一篇文章，但是试过之后发现在ie下不能正常显示<br />注释上说是innerhtml的问题。周末在网上搜索了几个解决办法。把自己的实现过程列下来。<br />js代码放在public文件夹下命名为in_place_select_editor.js<br /><pre name="code" class="java">
Ajax.InPlaceSelectEditor = Class.create();
Object.extend(Object.extend(Ajax.InPlaceSelectEditor.prototype, Ajax.InPlaceEditor.prototype), 
//继承了InPlaceEditor重写了createEditField方法
{
    createEditField: function(){
        var text;
        if (this.options.loadTextURL) {
            text = this.options.loadingText;
        }
        else {
            text = this.getText();
        }
        this.options.textarea = false;
	
        var selectField = document.createElement("select");
        selectField.name = "value";
		//innerhtml在ie下可能有问题
		//改动部分
		
        		if (this.options.selectOptionsHTML)
		{
			OptionsHTML=this.options.selectOptionsHTML.split(",")
			for(var i=0; i &lt; OptionsHTML.length; i++) {        
            selectField.options[i] = new Option(OptionsHTML[i],OptionsHTML[i]);
            }
			
		}
		else
		{
			selectField.options[0] = new Option('test','test');
			
			
			
		}
		
		//改动结束

		
		
        $A(selectField.options).each(function(opt, index){
            if (text == opt.value) {
                selectField.selectedIndex = index;
            }
        });
        selectField.style.backgroundColor = this.options.highlightcolor;
		
        this.editField = selectField;
        if (this.options.loadTextURL) {
            this.loadExternalText();
			
        }
	//关键是在form里面的内容	
        this.form.appendChild(this.editField);
		
    }
});



</pre><br /><br />view层命名为demo.rhtml<br /><br /><pre name="code" class="java">
&lt;div>
&lt;span class="in_place_editor_field" id="an_element_we_want_to_edit">Some Value&lt;/span>
&lt;/div>
&lt;script type="text/javascript">
	

    new Ajax.InPlaceSelectEditor('an_element_we_want_to_edit', '/an/update/url', {
        selectOptionsHTML: 'Blah' +
        ',Some Value' +
        ',Some Other Value'
    });
&lt;/script>




</pre><br /><br />如果想象in_place_editor_field那样使用<br />可以在application_helper.rb加入以下代码<br /><pre name="code" class="java">

module ApplicationHelper
  def in_place_select_editor_field(object, method, tag_options = {},
    in_place_editor_options = {})
    tag = ::ActionView::Helpers::InstanceTag.new(object, method, self)
    tag_options = { :tag => "span" ,
      :id => "#{object}_#{method}_#{tag.object.id}_in_place_editor" ,
      :class => "in_place_editor_field" }.merge!(tag_options)
    in_place_editor_options[:url] =
    in_place_editor_options[:url] ||
    url_for({ :action => "set_#{object}_#{method}" , :id => tag.object.id })
    tag.to_content_tag(tag_options.delete(:tag), tag_options) +
    in_place_select_editor(tag_options[:id], in_place_editor_options)
  end
  def in_place_select_editor(field_id, options = {})
    function = "new Ajax.InPlaceSelectEditor("
    function &lt;&lt; "'#{field_id}', "
    function &lt;&lt; "'#{url_for(options[:url])}'"
    function &lt;&lt; (', ' + options_for_javascript(
                                               {
'selectOptionsHTML' =>
%('#{escape_javascript(options[:select_options].gsub(/\n/, ""))}' )
    }
    )
    ) if options[:select_options]
      function &lt;&lt; ')'
      javascript_tag(function)
    end
  end



</pre><br /><br />view层<br /><pre name="code" class="java">
&lt;P>
    &lt;b>Name:&lt;/b>
    &lt;%= in_place_editor_field :contact, :name %>
    &lt;br/>
    &lt;b>Country:&lt;/b>
    &lt;%= in_place_select_editor_field(
    :contact,
    :country,
    {},
    :select_options => '中国,美国,英国') %>
&lt;/P>



</pre><br />controller层<br /><pre name="code" class="java">
class ContactsController &lt; ApplicationController
in_place_edit_for :contact,:country
.....


 def show
    @contact = Contact.find(params[:id])
  end
.....

end

</pre><br /><br />最后别忘了在使用前加上<br /><strong>&lt;%= javascript_include_tag "in_place_select_editor" %></strong><br /><br /><br />附上show.rhtml结果
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/217968#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 12:29:57 +0800</pubDate>
        <link>http://www.javaeye.com/topic/217968</link>
        <guid>http://www.javaeye.com/topic/217968</guid>
      </item>
      <item>
        <title>利用&quot;事件上提&quot; 来简化事件注册(防止潜在的内存泄露).</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://fins.javaeye.com">fins</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/217512" style="color:red;">http://www.javaeye.com/topic/217512</a>&nbsp;
          发表时间: 2008年07月22日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          众所周知, 浏览器中内存泄露以及内存无法回收(两者不是一回事,很多人都把他们弄混淆了),常常是由于对dom元素注册事件不当引起的.<br /><br />通常的解决方案是, 自行实现一套 添加事件, 移除事件 以及删除dom元素的机制.<br />为dom元素添加事件时, 同时记录 这个事件 以及对应的函数,<br />在删除dom元素时, 先移除dom元素上已经添加的事件 再删除dom元素本身.<br /><br />而当页面中添加了事件监听的dom元素很多时, 移除元素变得很麻烦.<br />例如 一个div 里面有个form form里有多个元素都添加了事件.<br />那么移除这个div时, 就要先去移除他下面每一个元素上的事件 然后再移除这个div.<br /><br />这种做法很多时候是必须的, 而且自己写一个"深度遍历子节点,并移除其事件"的函数也并不是很困难.<br /><br />但是 在很多时候 这种做法是可以避免的, 避免的方法就是, 把事件监听注册到更上层的dom元素中.<br />并且在事件函数中 通过 event.target/event.srcElement 来 事件发生在哪个元素上,然后来执行相关的方法.<br />这样 在移除元素时 只要移除这个元素以及它上面的事件 就可以了, 而不必执行(或者少量的执行)"移除所有子节点事件"的动作了.<br /><br /><br />见下面的例子 :<br /><br /><pre name="code" class="html">

  &lt;table width="300" border="1"  onclick="showDetail(event)"> 
  &lt;tr>
	&lt;td>1&lt;/td>
	&lt;td>Tom&lt;/td>
	&lt;td>&lt;input type="button" value="详细信息" userid="1" />&lt;/td>
  &lt;/tr>
  &lt;tr>
	&lt;td>2&lt;/td>
	&lt;td>Kate&lt;/td>
	&lt;td>&lt;input type="button" value="详细信息" userid="2"  />&lt;/td>
  &lt;/tr>
  &lt;tr>
	&lt;td>3&lt;/td>
	&lt;td>John&lt;/td>
	&lt;td>&lt;input type="button" value="详细信息"  userid="3" />&lt;/td>
  &lt;/tr>
  &lt;/table>

</pre><br /><br />在这个例子中, 实际上事件只是注册在table上, 而没有在"input type="button"上.<br /><br />"showDetail" 可以这样写<br /><br /><pre name="code" class="javascript">
	function showDetail_b(event) {
		event=event||window.event;
		var target=event.target||event.srcElement;
		if ( String(target.tagName).toLowerCase()=='input' &&  target.value=="详细信息") {
			showUserDetail(target.getAttribute('userid') );
		}
	}
</pre><br /><br /><br />当然 这种做法不是绝对的, 有时候这么做很可能让代码变得臃肿冗长.<br />到底是否使用"事件上提"的做法 要根据实际情况来选择.<br />不过 根据我的以往经验, 在列表(table)中, 使用这种技术非常合适.<br />因为 列表有着"行与行之间模型一致"(只是数据不一致,结构一致)的特点.<br /><br />例如,下面的效果, 都可以通过在 table上注册事件来实现:<br /><br />1 点击行, 行变色  (不必在 tr 上注册点击事件)<br />2 点击行中的某个按钮 (不必在 tr 里的 button 上注册点击事件)<br />3 鼠标经过行时 行变色 (不必在 tr上注册 mouseover/mouseout 事件, 而是可以在table上注册mousemove事件)<br />4 还有关于单元格的 很多效果.....<br /><br />当然,在非列表里 这种做法也有很多的用武之地.<br />总之 合理的利用"事件上提"的方法, 可以增强dom元素和事件的可控性, 有效的防止内存泄露和内存无法回收的情况.
          <br/>
          <span style="color:red;">
            <a href="http://fuliang.javaeye.com/topic/217512#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 22 Jul 2008 10:26:30 +0800</pubDate>
        <link>http://www.javaeye.com/topic/217512</link>
        <guid>http://www.javaeye.com/topic/217512</guid>
      </item>
      <item>
        <title>flex中使用Validator验证form表单</title>
        <author>JavaEye网站</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://zhaoyl.javaeye.com">zhaoyl</a>&nbsp;
          链接：<a href="http://www.javaeye.com/topic/219394" style="color:red;">http://www.javaeye.com/topic/219394</a>&nbsp;
          发表时间: 2008年07月25日
          <br/>
          声明：本文系JavaEye网站发布的原创文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          <p><img src="../../upload/picture/pic/18494/20e225bf-57e0-305d-8eef-9d0093b9aff8.bmp" height="557" alt="" width="512" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>代码如下：</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><span style="font-size: small;">&lt;?xml version="1.0" encoding="utf-8"?&gt; <br />&lt;!--<br />date:2008.7.24<br />version:v1.0<br />author:zhaoyl<br />des:验证表单并给予友好化提示</span></p>
<p><span style="font-size: small;">--&gt;<br />&lt;mx:Application xmlns:mx="</span><a href="http://www.adobe.com/2006/mxml"><span style="font-size: small;">http://www.adobe.com/2006/mxml</span></a><span style="font-size: small;">" <br />&nbsp;&nbsp;&nbsp; layout="vertical" <br />&nbsp;&nbs