﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-&lt;h3 style="font-family: Comic Sans MS"&gt;&lt;font color="#FA1A0A" size="10"&gt;︻┳═一Java&lt;/font&gt;&lt;/h3&gt;</title><link>http://www.blogjava.net/rain1102/</link><description>&lt;br/&gt;&lt;font color="green" style="font-family: 华文行楷;font-size:16px;"&gt;子曰：危邦不入，乱邦不居。天下有道则见，无道则隐。&lt;/font&gt;&lt;font color="#3C1435"&gt;&lt;/font&gt;</description><language>zh-cn</language><lastBuildDate>Sat, 20 Mar 2010 15:08:53 GMT</lastBuildDate><pubDate>Sat, 20 Mar 2010 15:08:53 GMT</pubDate><ttl>60</ttl><item><title>intersect in mysql</title><link>http://www.blogjava.net/rain1102/archive/2010/03/14/315404.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Sun, 14 Mar 2010 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2010/03/14/315404.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/315404.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2010/03/14/315404.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/315404.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/315404.html</trackback:ping><description><![CDATA[<p>An <span style="color: red">INTERSECT </span>is simply an inner join where we compare the tuples of one table with those of the other, and select those that appear in both while weeding out duplicates. So</p>
<p><code><font face="新宋体"><font style="color: #008000" color="#666633">select id, username from user where id&gt;1<br />
INTERSECT<br />
select id, username from user where id&lt;3</font></font></code></p>
<p>can simply be rewritten to</p>
<p><code><font face="新宋体"><font style="color: #ff0000" color="#0000ff"><strong>select id, username from user inner join<br />
(select id, username from user where id &lt;3) as b using (id, username)<br />
where id&gt;1</strong></font></font></code></p>
or<br />
<span style="color: red"><strong>select a.id, a.username from<br />
((select id, username from user where id &gt; 1) as a<br />
cross join <br />
(select id, username from user where id &lt;3) as b&nbsp; on a.id = b.id)</strong></span><img src ="http://www.blogjava.net/rain1102/aggbug/315404.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2010-03-14 20:49 <a href="http://www.blogjava.net/rain1102/archive/2010/03/14/315404.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MySQL序列解决方案[转载]</title><link>http://www.blogjava.net/rain1102/archive/2010/03/09/314917.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 09 Mar 2010 02:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2010/03/09/314917.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/314917.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2010/03/09/314917.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/314917.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/314917.html</trackback:ping><description><![CDATA[<span class="hilite1"><span class="hilite1">原文地址: http://meetrice.javaeye.com/blog/89426<br />
<br />
MySQL</span>自增长与Oracle序列的区别: <br />
自增长只能用于表中的其中一个字段 <br />
自增长只能被分配给固定表的固定的某一字段，不能被多个表共用. <br />
自增长会把一个未指定或NULL值的字段自动填上. <br />
<br />
在<span class="hilite1">mysql</span>中添加序列，请看下面的实例： <br />
在<span class="hilite1">MYSQL</span>里有这样一张表: <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>CREATE&nbsp;TABLE&nbsp;Movie( &nbsp;&nbsp;</span></span>
    <li><span>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT&nbsp;NOT&nbsp;NULL&nbsp;AUTO_INCREMENT, &nbsp;&nbsp;</span>
    <li><span>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARCHAR(</span><span class="number">60</span><span>)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span></span>
    <li><span>released&nbsp;YEAR&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span>
    <li><span>PRIMARY&nbsp;KEY&nbsp;(id) &nbsp;&nbsp;</span>
    <li><span>)&nbsp;ENGINE=InnoDB;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">CREATE TABLE Movie(
id           INT NOT NULL AUTO_INCREMENT,
name     VARCHAR(60) NOT NULL,
released YEAR NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB;
</pre>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>INSERT&nbsp;INTO&nbsp;Movie&nbsp;(name,released)&nbsp;VALUES&nbsp;(</span><span class="string">'Gladiator'</span><span>,</span><span class="number">2000</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>INSERT&nbsp;INTO&nbsp;Movie&nbsp;(id,name,released)&nbsp;VALUES&nbsp;(NULL,</span><span class="string">'The&nbsp;Bourne&nbsp;Identity'</span><span>,</span><span class="number">1998</span><span>);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">INSERT INTO Movie (name,released) VALUES ('Gladiator',2000);
INSERT INTO Movie (id,name,released) VALUES (NULL,'The Bourne Identity',1998);
</pre>
<br />
在ORACLE是这样的: <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>CREATE&nbsp;TABLE&nbsp;Movie( &nbsp;&nbsp;</span></span>
    <li><span>id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span>
    <li><span>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARCHAR2(</span><span class="number">60</span><span>)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span></span>
    <li><span>released&nbsp;INT&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span>
    <li><span>PRIMARY&nbsp;KEY&nbsp;(id) &nbsp;&nbsp;</span>
    <li><span>); &nbsp;&nbsp;</span>
    <li><span>CREATE&nbsp;SEQUENCE&nbsp;MovieSeq;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">CREATE TABLE Movie(
id          INT NOT NULL,
name     VARCHAR2(60) NOT NULL,
released INT NOT NULL,
PRIMARY KEY (id)
);
CREATE SEQUENCE MovieSeq;
</pre>
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>INSERT&nbsp;INTO&nbsp;Movie&nbsp;(id,name,released)&nbsp;VALUES&nbsp;(MovieSeq.NEXTVAL,</span><span class="string">'Gladiator'</span><span>,</span><span class="number">2000</span><span>);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">INSERT INTO Movie (id,name,released) VALUES (MovieSeq.NEXTVAL,'Gladiator',2000);
</pre>
<br />
<br />
在oracle下为表添加一个触发器，就可以实现<span class="hilite1">mysql</span>自增长功能: <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>CREATE&nbsp;OR&nbsp;REPLACE&nbsp;TRIGGER&nbsp;BRI_MOVIE_TRG &nbsp;&nbsp;</span></span>
    <li><span>BEFORE&nbsp;INSERT&nbsp;ON&nbsp;Movie &nbsp;&nbsp;</span>
    <li><span>FOR&nbsp;EACH&nbsp;ROW &nbsp;&nbsp;</span>
    <li><span>BEGIN &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;SELECT&nbsp;MovieSeq.NEXTVAL&nbsp;INTO&nbsp;:</span><span class="keyword">new</span><span>.id&nbsp;FROM&nbsp;DUAL; &nbsp;&nbsp;</span></span>
    <li><span>END&nbsp;BRI_MOVIE_TRG; &nbsp;&nbsp;</span>
    <li><span>. &nbsp;&nbsp;</span>
    <li><span>RUN;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">CREATE OR REPLACE TRIGGER BRI_MOVIE_TRG
BEFORE INSERT ON Movie
FOR EACH ROW
BEGIN
SELECT MovieSeq.NEXTVAL INTO :new.id FROM DUAL;
END BRI_MOVIE_TRG;
.
RUN;
</pre>
<br />
这样，插件记录就可以成为<span class="hilite1">MYSQL</span>风格： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>INSERT&nbsp;INTO&nbsp;Movie&nbsp;(name,released)&nbsp;VALUES&nbsp;(</span><span class="string">'The&nbsp;Lion&nbsp;King'</span><span>,</span><span class="number">1994</span><span>);&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">INSERT INTO Movie (name,released) VALUES ('The Lion King',1994);
</pre>
<br />
<br />
下面我们来看看如何在<span class="hilite1">mysql</span>数据里使用Oracle序列语法.NEXTVAL 和 .CURVAL. <br />
我们假设在<span class="hilite1">mysql</span>中序列的语法是: <br />
<ul><br />
    NEXTVAL(&#8217;sequence&#8217;); <br />
    CURRVAL(&#8217;sequence&#8217;); <br />
    SETVAL(&#8217;sequence&#8217;,value); <br />
</ul>
<br />
<br />
下面就是<strong><span style="font-size: 24pt">CURRRVAL</span></strong>的实现方案: <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>DROP&nbsp;TABLE&nbsp;IF&nbsp;EXISTS&nbsp;sequence; &nbsp;&nbsp;</span></span>
    <li><span>CREATE&nbsp;TABLE&nbsp;sequence&nbsp;( &nbsp;&nbsp;</span>
    <li><span>name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VARCHAR(</span><span class="number">50</span><span>)&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span></span>
    <li><span>current_value&nbsp;INT&nbsp;NOT&nbsp;NULL, &nbsp;&nbsp;</span>
    <li><span>increment&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INT&nbsp;NOT&nbsp;NULL&nbsp;DEFAULT&nbsp;</span><span class="number">1</span><span>, &nbsp;&nbsp;</span></span>
    <li><span>PRIMARY&nbsp;KEY&nbsp;(name) &nbsp;&nbsp;</span>
    <li><span>)&nbsp;ENGINE=InnoDB; &nbsp;&nbsp;</span>
    <li><span>INSERT&nbsp;INTO&nbsp;sequence&nbsp;VALUES&nbsp;(</span><span class="string">'MovieSeq'</span><span>,</span><span class="number">3</span><span>,</span><span class="number">5</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>DROP&nbsp;FUNCTION&nbsp;IF&nbsp;EXISTS&nbsp;currval; &nbsp;&nbsp;</span>
    <li><span>DELIMITER&nbsp;$ &nbsp;&nbsp;</span>
    <li><span>CREATE&nbsp;FUNCTION&nbsp;currval&nbsp;(seq_name&nbsp;VARCHAR(</span><span class="number">50</span><span>)) &nbsp;&nbsp;</span></span>
    <li><span>RETURNS&nbsp;INTEGER &nbsp;&nbsp;</span>
    <li><span>CONTAINS&nbsp;SQL &nbsp;&nbsp;</span>
    <li><span>BEGIN &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;DECLARE&nbsp;value&nbsp;INTEGER; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;SET&nbsp;value&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;SELECT&nbsp;current_value&nbsp;INTO&nbsp;value &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;FROM&nbsp;sequence &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;WHERE&nbsp;name&nbsp;=&nbsp;seq_name; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;RETURN&nbsp;value; &nbsp;&nbsp;</span>
    <li><span>END$ &nbsp;&nbsp;</span>
    <li><span>DELIMITER&nbsp;;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">DROP TABLE IF EXISTS sequence;
CREATE TABLE sequence (
name              VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment       INT NOT NULL DEFAULT 1,
PRIMARY KEY (name)
) ENGINE=InnoDB;
INSERT INTO sequence VALUES ('MovieSeq',3,5);
DROP FUNCTION IF EXISTS currval;
DELIMITER $
CREATE FUNCTION currval (seq_name VARCHAR(50))
RETURNS INTEGER
CONTAINS SQL
BEGIN
DECLARE value INTEGER;
SET value = 0;
SELECT current_value INTO value
FROM sequence
WHERE name = seq_name;
RETURN value;
END$
DELIMITER ;
</pre>
<br />
测试一下结果： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><span class="hilite1">mysql</span>&gt;&nbsp;SELECT&nbsp;currval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;currval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">3</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;SELECT&nbsp;currval(</span><span class="string">'x'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+--------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;currval(</span><span class="string">'x'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+--------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">0</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+--------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set,&nbsp;</span><span class="number">1</span><span>&nbsp;warning&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;show&nbsp;warnings; &nbsp;&nbsp;</span>
    <li><span>+---------+------+------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;Level&nbsp;&nbsp;&nbsp;|&nbsp;Code&nbsp;|&nbsp;Message&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;</span>
    <li><span>+---------+------+------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;Warning&nbsp;|&nbsp;</span><span class="number">1329</span><span>&nbsp;|&nbsp;No&nbsp;data&nbsp;to&nbsp;FETCH&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------+------+------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span class="hilite1">mysql</span>&gt; SELECT currval('MovieSeq');
+---------------------+
| currval('MovieSeq') |
+---------------------+
|                   3 |
+---------------------+
1 row in set (0.00 sec)
<span class="hilite1">mysql</span>&gt; SELECT currval('x');
+--------------+
| currval('x') |
+--------------+
|            0 |
+--------------+
1 row in set, 1 warning (0.00 sec)
<span class="hilite1">mysql</span>&gt; show warnings;
+---------+------+------------------+
| Level   | Code | Message          |
+---------+------+------------------+
| Warning | 1329 | No data to FETCH |
+---------+------+------------------+
1 row in set (0.00 sec)
</pre>
<br />
<br />
<strong><span style="font-size: 24pt">nextval</span></strong> <br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>DROP&nbsp;FUNCTION&nbsp;IF&nbsp;EXISTS&nbsp;nextval; &nbsp;&nbsp;</span></span>
    <li><span>DELIMITER&nbsp;$ &nbsp;&nbsp;</span>
    <li><span>CREATE&nbsp;FUNCTION&nbsp;nextval&nbsp;(seq_name&nbsp;VARCHAR(</span><span class="number">50</span><span>)) &nbsp;&nbsp;</span></span>
    <li><span>RETURNS&nbsp;INTEGER &nbsp;&nbsp;</span>
    <li><span>CONTAINS&nbsp;SQL &nbsp;&nbsp;</span>
    <li><span>BEGIN &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;UPDATE&nbsp;sequence &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current_value&nbsp;=&nbsp;current_value&nbsp;+&nbsp;increment &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;WHERE&nbsp;name&nbsp;=&nbsp;seq_name; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;RETURN&nbsp;currval(seq_name); &nbsp;&nbsp;</span>
    <li><span>END$ &nbsp;&nbsp;</span>
    <li><span>DELIMITER&nbsp;;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">DROP FUNCTION IF EXISTS nextval;
DELIMITER $
CREATE FUNCTION nextval (seq_name VARCHAR(50))
RETURNS INTEGER
CONTAINS SQL
BEGIN
UPDATE sequence
SET          current_value = current_value + increment
WHERE name = seq_name;
RETURN currval(seq_name);
END$
DELIMITER ;</pre>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">15</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.09</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">20</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.01</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">25</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code"><span class="hilite1">mysql</span>&gt; select nextval('MovieSeq');
+---------------------+
| nextval('MovieSeq') |
+---------------------+
|                  15 |
+---------------------+
1 row in set (0.09 sec)
<span class="hilite1">mysql</span>&gt; select nextval('MovieSeq');
+---------------------+
| nextval('MovieSeq') |
+---------------------+
|                  20 |
+---------------------+
1 row in set (0.01 sec)
<span class="hilite1">mysql</span>&gt; select nextval('MovieSeq');
+---------------------+
| nextval('MovieSeq') |
+---------------------+
|                  25 |
+---------------------+
1 row in set (0.00 sec)</pre>
<br />
<br />
<strong><span style="font-size: 24pt">setval</span></strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span>DROP&nbsp;FUNCTION&nbsp;IF&nbsp;EXISTS&nbsp;setval; &nbsp;&nbsp;</span></span>
    <li><span>DELIMITER&nbsp;$ &nbsp;&nbsp;</span>
    <li><span>CREATE&nbsp;FUNCTION&nbsp;setval&nbsp;(seq_name&nbsp;VARCHAR(</span><span class="number">50</span><span>),&nbsp;value&nbsp;INTEGER) &nbsp;&nbsp;</span></span>
    <li><span>RETURNS&nbsp;INTEGER &nbsp;&nbsp;</span>
    <li><span>CONTAINS&nbsp;SQL &nbsp;&nbsp;</span>
    <li><span>BEGIN &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;UPDATE&nbsp;sequence &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;SET&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;current_value&nbsp;=&nbsp;value &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;WHERE&nbsp;name&nbsp;=&nbsp;seq_name; &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;&nbsp;RETURN&nbsp;currval(seq_name); &nbsp;&nbsp;</span>
    <li><span>END$ &nbsp;&nbsp;</span>
    <li><span>DELIMITER&nbsp;;&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">DROP FUNCTION IF EXISTS setval;
DELIMITER $
CREATE FUNCTION setval (seq_name VARCHAR(50), value INTEGER)
RETURNS INTEGER
CONTAINS SQL
BEGIN
UPDATE sequence
SET          current_value = value
WHERE name = seq_name;
RETURN currval(seq_name);
END$
DELIMITER ;</pre>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://meetrice.javaeye.com/blog/89426#"><img alt="复制代码" src="http://meetrice.javaeye.com/images/icon_copy.gif" /></a></div>
</div>
<ol class="dp-j">
    <li><span><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;setval(</span><span class="string">'MovieSeq'</span><span>,</span><span class="number">150</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+------------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;setval(</span><span class="string">'MovieSeq'</span><span>,</span><span class="number">150</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+------------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">150</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+------------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.06</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;curval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;currval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">150</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span><span class="hilite1">mysql</span>&gt;&nbsp;select&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>); &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;nextval(</span><span class="string">'MovieSeq'</span><span>)&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span>|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">155</span><span>&nbsp;| &nbsp;&nbsp;</span></span>
    <li><span>+---------------------+ &nbsp;&nbsp;</span>
    <li><span class="number">1</span><span>&nbsp;row&nbsp;in&nbsp;set&nbsp;(</span><span class="number">0.00</span><span>&nbsp;sec)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
</span>
<pre class="java" style="display: none" name="code">&nbsp;</pre><img src ="http://www.blogjava.net/rain1102/aggbug/314917.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2010-03-09 10:25 <a href="http://www.blogjava.net/rain1102/archive/2010/03/09/314917.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SEO注意点</title><link>http://www.blogjava.net/rain1102/archive/2010/02/01/311489.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 01 Feb 2010 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2010/02/01/311489.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/311489.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2010/02/01/311489.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/311489.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/311489.html</trackback:ping><description><![CDATA[设计与内容指南 <br />
<blockquote>* 网站应具有清晰的层次结构和文本链接。 每个网页应至少可以通过一个静态文本链接打开。<br />
* 为用户提供网站地图，列出指向网站重要部分的链接。 如果网站地图上的链接超过或大约为 100 个，则需要将网站地图拆分为多个网页。<br />
* 网站应实用且信息丰富，网页文字应清晰、准确地表述要传达的内容。<br />
* 要考虑到用户会使用哪些字词来查找您的网页，确保网站上确实包含了这些文字。<br />
* 尽量使用文字而不是图片来显示重要的名称、内容或链接。 Google 抓取工具无法识别图片中所含的文字。<br />
* 确保 &lt;标题&gt; 元素和 ALT 属性具有描述性且准确无误。<br />
* 检查链接是否损坏，并确保 HTML 格式正确。<br />
* 如果要使用动态网页（即网址中包含"?" 字符），请注意并非每一个搜索引擎抓取工具都能抓取动态和静态网页。缩短参数长度和减少参数数目都会对这种情况有帮助。<br />
* 将特定网页上的链接限制在合理的数量内（少于 100 个)<br />
<span style="color: #ff0000"><strong>质量指南 - 具体指南</strong></span><br />
<br />
* 请不要使用隐藏文本或隐藏链接。<br />
* 请不要使用隐藏真实内容或欺骗性的重定向手段。<br />
<p>&nbsp;</p>
* 请不要向 Google 发送自动查询。<br />
* 请不要加载使用无关关键字的网页。<br />
* 请不要创建包含大量重复内容的多个网页、子域或域。<br />
* 请不要制作欺诈性或安装有病毒、特洛伊木马或其他有害软件的网页。<br />
* 请不要专门针对搜索引擎创建"桥页"，或使用其他如联属计划这类原创内容很少或几乎没有原创内容的俗套 (cookie cutter) 方法。<br />
* 如果您的网站参与联属计划，请确保您的网站可为其增添价值。 请提供独特且相关的内容，使用户有理由首先访问您的网站。<br />
这篇文章的出处:http://www.google.com/support/webmasters/bin/answer.py?answer=35769,<br />
<strong>我在原有的基础上补充几点:<br />
</strong><br />
<p>1.文件命名不宜过长.网站设计中不能出现死页面.死链接.错误链接.空链接.文件名应该富有意义(这点的出发点似乎是为了更容易理解文件的大概内容)<br />
2.除非呈现数据.否则布局不要用table<br />
&nbsp;</p>
3.URL地址,通过搜索得知.静态页面以及伪静态页面和动态页面google是一样可以收录的.但google建议参动态页面参数不宜过长.我的建议一般不要超过三个,但哪种页面google最亲睐,<span style="color: #0000ff">我们得先来了解一下google收录的基本原理和规律</span>.<br />
<p>&nbsp;&nbsp;&nbsp; google会根据你的网站首页(或其它页)来遍历该页面的其它链接.例如:你的首页有100个超链接.那么google会遍历你的这100个链接页面.再根据其它的页面的链接一个一个遍历直至整站遍历完成.如果中途出现很多死链接,错误链接或死页的话.google就会认为你这个网站错误百出.可能中止遍历,从而影响你页面的收录效果.那么带参数的动态页面或伪静态页是否会影响收录呢?答安是肯定的.再举个例子:如有一个显示产品详细内容的页面:www.a.com/products.aspx?id=x的网页.那么有100种产品是存在数据库里面的.根据不同的ID值来通过products.aspx?id={1-100}中的&lt;%#Eval("数据库字段")%&gt;来显示相应的产品内容.那么看似有100个页面.而实际上只有products.aspx这一个页面.而google会遍历你的数据库记录吗?不会.所以你有100个产品介绍.可能只能收录一个页面!(这种形式是很多cms或企业站所采用的方式),那么有办法能收录这100个页面吗?答安是:可以.折中的选择方案是做一个产品列表页如productlist.html(aspx)(这个页面应该是手工静态页或后台生成静态页.,只要不从数据库里面读数据就可以),该页面内容如下:</p>
<p>&lt;a href="products.aspx?id=1"&gt;球阀&lt;/a&gt;<br />
&lt;a href="products.aspx?id=2"&gt;闸阀&lt;/a&gt;<br />
.......<br />
上面的内容应该静态生成.那么google在遍历productlist.aspx(html)页面的时候.就会遍历这些产品相应的地址了.遍历地址时会根据这个地址是否返回404错误而缓存相应的页面内容..(原理很简单..说了一大堆.不知道大家能否理解)<br />
4.不要轻易网站内页面文件名<br />
&nbsp;&nbsp; google一旦收录了这个页面.而不久你又将这个页面删除或改名.那么GOOGLE再次收录的时候发现这个页面不见了.肯定对你的PR值是有影响的<br />
5.图片的alt属性不要为空.而且内容与你的关键字有关(后面详解)<br />
6.一定要在web.config里面定义404错误转向.这个转向页面里面最好还要定义转向各个重要页面的链接<br />
再加一点:<br />
&nbsp;7.无论在站点内的哪个页面.你必须保证你可以在当前页通过页面与页面之间的链接能跳转到任何一个页面(好像有点别扭.就是说你的页面必须不可缺少正确的导航)<br />
</p>
</blockquote><img src ="http://www.blogjava.net/rain1102/aggbug/311489.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2010-02-01 12:36 <a href="http://www.blogjava.net/rain1102/archive/2010/02/01/311489.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jQuery的Validation插件[转载]</title><link>http://www.blogjava.net/rain1102/archive/2010/01/25/310783.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 25 Jan 2010 13:04:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2010/01/25/310783.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/310783.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2010/01/25/310783.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/310783.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/310783.html</trackback:ping><description><![CDATA[原文地址: http://blog.csdn.net/ziwen00/archive/2009/09/14/4551346.aspx<br />
<p>jQuery的Validation插件</p>
<p>最新最全的jQuery插件可以从jQuery的官方网站上面获得,jQuery下载验证插件的地址是http://plugins.jquery.com/在打开页面的左上角&#8217;Search&#8217;框中输入validation就可以找到我们想要的验证插件了,在http://plugins.jquery.com/project/validate下,我们找到了目前最新的版本(2009年6月17日)官方推出的1.5.5版的validate.js.</p>
<p>Validation插件式历史悠久的jQuery插件之一,经过了全球各种项目的验证,得到了很多WEB开发者的好评,作为一个表单验证的解决方案,Validation有很多的优点,比如:内置的验证规则,可以自定义验证规则,简单而且强大的验证信息提示,实时进行验证的功能.都可以令前台开发变得非常的简单.Validation具有内置的必填,数字,Email,URL等多种验证规则.实时验证方面,通过blur和keyup时间来触发验证规则,可以达到实时验证的目的.</p>
<p>下面是一个简单的例子,HTML和jQuery代码如下:</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;jQuery之验证插件&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery-1.3.2.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery.validate.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style type='text/css'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *{font-family:Verdana;font-size:96%;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.error{float:none;color:red;padding-left:.5em;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p{clear:both;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .submit{margin-left:12em;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; em{font-weight:bold;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).ready(function(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //确定哪一个表单需要进行验证</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate();</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form class='cmxform' id='commentForm' method='get' action='#'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;一个简单的带有提示的评论例子&lt;/legend&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cusername'&gt;姓名&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 针对不同的字段,进行验证规则编码,设置字段相应的属性 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- class='required'来设置必填验证,minlength='2'设置最小长度验证 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cusername' name='username' size='25' class='required' minlength='2'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cemail'&gt;电子邮件&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- class='required,email'为必填内容和email规则验证 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cemail' name='email' size='25' class='required email'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='curl'&gt;网址&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- class='url'设置url验证 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='curl' name='url' size='25' class='url' value=''/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='ccomment'&gt;你的评论&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 对评论textarea进行必填验证 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;textarea id='ccomment' name='comment' cols='25' class='required'&gt;&lt;/textarea&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input class='submit' type='submit' value='提交'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>上面的代码实现了如下的验证:</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对&#8221;姓名&#8221;的必填和长度至少为2为的验证</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对&#8221;电子邮件&#8221;的验证和是否为E-mail格式的验证</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对&#8221;网址&#8221;是否为url的验证</p>
<p>4)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 对&#8221;你的评论&#8221;的必填验证</p>
<p>5)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 提供了在用户输入的时候对长度的实时验证</p>
<p>只需要完成如下几步,就可以将一个普通的表单变成一个可以进行验证的表单:</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 引入jQuery库和Validation插件</p>
<p><br />
view plaincopy to clipboardprint?<br />
&lt;mce:script type='text/javascript' src="jquery-1.3.2.js" mce_src="jquery-1.3.2.js"&gt;&lt;/mce:script&gt;&nbsp; <br />
&nbsp; <br />
&lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;&nbsp; <br />
&nbsp; <br />
&lt;mce:script type='text/javascript' src="jquery.validate.js" mce_src="jquery.validate.js"&gt;&lt;/mce:script&gt;&nbsp; <br />
&lt;mce:script type='text/javascript' src="jquery-1.3.2.js" mce_src="jquery-1.3.2.js"&gt;&lt;/mce:script&gt;</p>
<p>&lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;</p>
<p>&lt;mce:script type='text/javascript' src="jquery.validate.js" mce_src="jquery.validate.js"&gt;&lt;/mce:script&gt;<br />
&nbsp;</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 确定是哪一个表单需要被验</p>
<p>&nbsp;</p>
<p>view plaincopy to clipboardprint?<br />
$(document).ready(function(){&nbsp;&nbsp; <br />
&nbsp; <br />
//确定哪一个表单需要进行验证&nbsp;&nbsp; <br />
&nbsp; <br />
$('#commentForm').validate();&nbsp;&nbsp; <br />
&nbsp; <br />
});&nbsp; <br />
$(document).ready(function(){</p>
<p>//确定哪一个表单需要进行验证</p>
<p>$('#commentForm').validate();</p>
<p>});<br />
&nbsp;</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 针对不同的字段,进行验证规则的编码,设置字段相应的属性</p>
<p><br />
view plaincopy to clipboardprint?<br />
&lt;input id='cusername' name='username' size='25' class='required' minlength='2'/&gt;&nbsp; <br />
&nbsp; <br />
&lt;input id='cemail' name='email' size='25' class='required email'/&gt;&nbsp; <br />
&nbsp; <br />
&lt;textarea id='ccomment' name='comment' cols='25' class='required'/&gt;&nbsp; <br />
&lt;input id='cusername' name='username' size='25' class='required' minlength='2'/&gt;</p>
<p>&lt;input id='cemail' name='email' size='25' class='required email'/&gt;</p>
<p>&lt;textarea id='ccomment' name='comment' cols='25' class='required'/&gt;<br />
&nbsp;</p>
<p>将所有的验证规则写到class属性里:</p>
<p>在实际的开发中,有的时候将验证规则写到class=&#8217;required email&#8217;有的时候写到minlength=&#8217;2&#8217;里面,这样非常的不方便,有没有一种方式可以将所有的验证规则放到一个地方去呢?这个答案是肯定的.jQuery充分考虑到了这一点,我们可以通过另外一个JavaScript库来将所有的验证规则放到一个class文件当中去.这样就大大方面了对验证规则的管理.</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在下载的\jquery-validate\lib文件夹下面找到jquery.metadata.js.放到项目当中,然后引入该jQuery插件.jquery.metadate.js是一个支持固定格式解析的jQuery插件,Validation插件将其很好的融合到验证规则编码当中.</p>
<p>view plaincopy to clipboardprint?<br />
&lt;mce:script type="text/javascript" src="jquery.metadata.js" mce_src="jquery.metadata.js"&gt;&lt;/mce:script&gt;&nbsp; <br />
&lt;mce:script type="text/javascript" src="jquery.metadata.js" mce_src="jquery.metadata.js"&gt;&lt;/mce:script&gt; </p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 改变调用的验证方法</p>
<p>&nbsp;</p>
<p>view plaincopy to clipboardprint?<br />
&lt;mce:script type='text/javascript'&gt;&lt;!--&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; $(document).ready(function(){&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //确定那个表单进行验证(改变调用的验证方法)&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate({meta: "validate"});&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; });&nbsp;&nbsp; <br />
// --&gt;&lt;/mce:script&gt;&nbsp; <br />
&lt;mce:script type='text/javascript'&gt;&lt;!--<br />
&nbsp;&nbsp;&nbsp; $(document).ready(function(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //确定那个表单进行验证(改变调用的验证方法)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate({meta: "validate"});</p>
<p>&nbsp;&nbsp;&nbsp; });<br />
// --&gt;&lt;/mce:script&gt;<br />
&nbsp;</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将所有的验证规则都通过类似{validate:{required:true,email:true}}的形式,写到class属性当中,详细的HTML代码如下:</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;jQuery之验证插件&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery-1.3.2.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery.validate.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入一个新的jQuery插件 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type="text/javascript" src='jquery.metadata.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style type='text/css'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *{font-family:Verdana;font-size:96%;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.error{float:none;color:red;padding-left:.5em;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p{clear:both;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .submit{margin-left:12em;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; em{font-weight:bold;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).ready(function(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //确定那个表单进行验证(改变调用的验证方法)</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate({meta: "validate"});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form class='cmxform' id='commentForm' method='get' action='#'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;一个简单的带有提示的评论例子&lt;/legend&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cusername'&gt;姓名&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cusername' name='username' size='25' class='{validate:{required:true,minlength:2}}'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cemail'&gt;电子邮件&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cemail' name='email' size='25' class='{validate:{required:true,email:true}}'/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='curl'&gt;网址&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='curl' name='url' size='25' class='{validate:{url:true}}' value=''/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='ccomment'&gt;你的评论&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;textarea id='ccomment' name='comment' cols='25' class='{validate:{required:true}}'&gt;&lt;/textarea&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input class='submit' type='submit' value='提交'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>将验证行为和HTML结构完全脱离的一种验证写法:</p>
<p>上面的两种写法,一种是通过给标签添加属性来完成验证,一种是通过jquery.metadate.js的帮助将所有的验证规则添加到class属性中,都没有符合jQuery提倡的&#8221;行为和操作分离&#8221;的一个原则,下面的方法就补足了这个缺陷,可以让HTML结构和验证规则很好的分离出来</p>
<p>HTML代码如下:</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;jQuery之验证插件&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery-1.3.2.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery.validate.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style type='text/css'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *{font-family:Verdana;font-size:96%;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.error{float:none;color:red;padding-left:.5em;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p{clear:both;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .submit{margin-left:12em;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; em{font-weight:bold;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).ready(function(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate({</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rules:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minlength:3</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:true,</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email:true</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url:"url",</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment:"required"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; })</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form class='cmxform' id='commentForm' method='get' action='#'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;一个简单的带有提示的评论例子&lt;/legend&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cusername'&gt;姓名&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cusername' name='username' size='25' /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cemail'&gt;电子邮件&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cemail' name='email' size='25' /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='curl'&gt;网址&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='curl' name='url' size='25' value=''/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='ccomment'&gt;你的评论&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;textarea id='ccomment' name='comment' cols='25'&gt;&lt;/textarea&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input class='submit' type='submit' value='提交'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>在这种&#8221;HTML和验证完全分离&#8221;的验证规则写法的步骤如下:</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在$(&#8220;#ccommentForm&#8221;).validate()方法中增加rules属性</p>
<p>2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过每个字段的name属性来匹配验证规则</p>
<p>3)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 定义验证规则,比如required:true,email:true,minlength:2等等.</p>
<p>将默认的英文验证信息变成中文:</p>
<p>validation插件默认的验证信息是英文的,要想将validation验证插件给出的验证信息变成中文就可以到jquery-validate\localization文件夹下面找到messages_cn.js文件,这个就是中文的验证信息库,我们只需要在代码中将这个文件导入就可以实现中文验证信息的输出了.在jquery-validate\localization这个文件夹下面,还有很多种语言,我们可以选择适当的语言引入到我们的项目当中,实现提示信息的本地化.</p>
<p>view plaincopy to clipboardprint?<br />
&lt;!-- 引入中文验证信息库 --&gt;&nbsp; <br />
&nbsp; <br />
&lt;mce:script type='text/javascript' src="messages_cn.js" mce_src="messages_cn.js"&gt;&lt;/mce:script&gt;&nbsp; <br />
&lt;!-- 引入中文验证信息库 --&gt;</p>
<p>&lt;mce:script type='text/javascript' src="messages_cn.js" mce_src="messages_cn.js"&gt;&lt;/mce:script&gt;<br />
&nbsp;</p>
<p>&nbsp;</p>
<p>改变千篇一律的验证信息:</p>
<p>validaion验证插件可以非常方便的进行自定义验证规则,这样可以用来代替千篇一律的验证信息,具体修改好的HTML代码如下:</p>
<p>&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"&gt;</p>
<p>&lt;html&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;head&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=utf-8"&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;jQuery之验证插件&lt;/title&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery-1.3.2.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入了jQuery库之后,继续引入validation插件 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery.validate.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 引入中文验证信息库 --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='messages_cn.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;!-- 要将所有的验证规则放到css标签当中去,就要引入metadate.js --&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript' src='jquery.metadata.js'&gt;&lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;style type='text/css'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *{font-family:Verdana;font-size:96%;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; label.error{float:none;color:red;padding-left:.5em;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p{clear:both;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .submit{margin-left:12em;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; em{font-weight:bold;vertical-align:top;}</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/style&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type='text/javascript'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(document).ready(function(){</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('#commentForm').validate({meta:"validate"});</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/script&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/head&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;body&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;form class='cmxform' id='commentForm' method='get' action='#'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;legend&gt;一个简单的带有提示的评论例子&lt;/legend&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cusername'&gt;姓名&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cusername' name='username' </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="{validate:{required:true,minlength:2,messages:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:'姓名是必须要输入的',</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minlength:'请输入不少于两个字符的姓名'}}}"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size='25' /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='cemail'&gt;电子邮件&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='cemail' name='email' </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="{validate:{required:true,email:true,messages:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:'邮箱是必须要输入的',</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email:'请输入符合格式的Email地址'}}}"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size='25' /&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='curl'&gt;网址&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input id='curl' name='url' </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="{validate:{url:true,messages:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url:'您的URL地址的输入不符合要求'}}}" </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; size='25' value=''/&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;label for='ccomment'&gt;你的评论&lt;/label&gt;&lt;em&gt;*&lt;/em&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;textarea id='ccomment' name='comment' </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="{validate:{</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:true,messages:{required:'多少也写点评论哦'}}}"</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cols='25'&gt;&lt;/textarea&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;input class='submit' type='submit' value='提交'&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/p&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/fieldset&gt;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/form&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<p>具体来说,上面的代码就是在class的属性中增加了类似messages:{required:&#8217;&#8217;,email:&#8217;&#8217;}形式的一块代码,这样就可以显示我们自定义的验证信息了.</p>
<p>自己来定义表单验证的业务规则:</p>
<p>通常在开发项目中,验证规则与实际的业务逻辑是息息相关的,一个好的验证插件必须要支持自定义验证机制,当然jQuery就提供了多种机制来满足用户的业务需要.</p>
<p>我们添加以下代码到上面的HTML代码中,方便进行验证码的功能实现.</p>
<p>&nbsp;</p>
<p>&nbsp;view plaincopy to clipboardprint?<br />
&lt;p&gt;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;label for='cvalcode'&gt;验证码&lt;/label&gt;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;input id='cvalcode' name='valcode' size='25' value=''/&gt;=7+9&nbsp;&nbsp; <br />
&nbsp; <br />
&lt;/p&gt;&nbsp; <br />
&lt;p&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;label for='cvalcode'&gt;验证码&lt;/label&gt;</p>
<p>&nbsp;&nbsp;&nbsp; &lt;input id='cvalcode' name='valcode' size='25' value=''/&gt;=7+9</p>
<p>&lt;/p&gt;<br />
&nbsp;</p>
<p>为了实现&#8221;验证码&#8221;的功能,我们需要以下几个步骤:</p>
<p>1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 自定义一个验证规则</p>
<p>view plaincopy to clipboardprint?<br />
$.validator.addMethod(&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; "formula",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //验证方法的名称&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; function(value,element,param){&nbsp;&nbsp; //验证规则&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return value==eval(param);&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '请输入正确的结果'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提示验证信息&nbsp;&nbsp; <br />
&nbsp; <br />
);&nbsp;&nbsp; <br />
$.validator.addMethod(</p>
<p>&nbsp;&nbsp;&nbsp; "formula",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //验证方法的名称</p>
<p>&nbsp;&nbsp;&nbsp; function(value,element,param){&nbsp;&nbsp; //验证规则</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return value==eval(param); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '请输入正确的结果'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提示验证信息</p>
<p>); <br />
&nbsp;</p>
<p><br />
&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在代码中引用以上验证规则</p>
<p>view plaincopy to clipboardprint?<br />
$('#commentForm').validate({&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; rules:{&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username:{&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:true,&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minlength:3&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email:{&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; required:true,&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; email:true&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url:"url",&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; comment:"required",&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; valcode:{formula:"7+9"}&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
})&nbsp; </p>
<p>&nbsp;</p>
<p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/ziwen00/archive/2009/09/14/4551346.aspx</p><img src ="http://www.blogjava.net/rain1102/aggbug/310783.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2010-01-25 21:04 <a href="http://www.blogjava.net/rain1102/archive/2010/01/25/310783.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Top 10 CSS Snippets</title><link>http://www.blogjava.net/rain1102/archive/2010/01/04/308123.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 04 Jan 2010 00:46:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2010/01/04/308123.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/308123.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2010/01/04/308123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/308123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/308123.html</trackback:ping><description><![CDATA[<p>原文地址：http://webdevmania.com/archive/top_10_css_snippets/<br />
</p>
<p>I have noticed myself to use a few different code snippets on a daily basis so I thought some of you might find them useful. So here we go.</p>
<ol>&nbsp;
    <li><strong>&nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3center_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="center" border="0" alt="center" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3center_thumb.jpg" width="162" height="123" /></a>&nbsp; &nbsp; &nbsp; <br />
    Centering a website (or other elements)</strong>&nbsp; &nbsp; <br />
    The HTML
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-xml">
        <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">DIV</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">wrap</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span class="tag">&lt;/</span><span class="tag-name">DIV</span><span class="tag">&gt;</span><span class="comments">&lt;!--&nbsp;end&nbsp;wrap&nbsp;--&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="html" name="code">
    <div class="wrap">
    </div>
    &lt;!-- end wrap --&gt;
    </pre>
    <p>The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.wrap&nbsp;{&nbsp;</span><span class="keyword">width</span><span>:</span><span class="value">960px</span><span>;&nbsp;</span><span class="keyword">margin</span><span>:</span><span class="value">0</span><span>&nbsp;</span><span class="value">auto</span><span>;} &nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .wrap { width:960px; margin:0 auto;}
    </pre>
    <p>&nbsp; </p>
    <p>This is an oldie, but apperantly it is not as obvious as you would think.</p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3stickyfooter_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="stickyfooter" border="0" alt="stickyfooter" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3stickyfooter_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Sticky Footer (make footer always be on bottom without absolute positioning)</strong> </p>
    <p>&nbsp; <br />
    The HTML </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-xml">
        <li class="alt"><span><span class="tag">&lt;</span><span class="tag-name">DIV</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">wrap</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="tag">&lt;</span><span class="tag-name">DIV</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">main</span><span>&nbsp;</span><span class="attribute">class</span><span>=</span><span class="attribute-value">clearfix</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">DIV</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">DIV</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="tag">&lt;</span><span class="tag-name">DIV</span><span>&nbsp;</span><span class="attribute">id</span><span>=</span><span class="attribute-value">footer</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="tag">&lt;/</span><span class="tag-name">DIV</span><span class="tag">&gt;</span><span>&nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="html" name="code">
    <div id="wrap">
    <div id="main" class="clearfix">
    </div>
    </div>
    <div id="footer">
    </div>
    </pre>
    <p>The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>*&nbsp;{&nbsp;</span><span class="keyword">margin</span><span>:</span><span class="value">0</span><span>;&nbsp;</span><span class="keyword">padding</span><span>:</span><span class="value">0</span><span>;&nbsp;}&nbsp; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>html,&nbsp;body,&nbsp;</span><span class="value">#wrap</span><span>&nbsp;{&nbsp;</span><span class="keyword">height</span><span>:&nbsp;</span><span class="value">100%</span><span>;&nbsp;} &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>body&nbsp;&gt;&nbsp;</span><span class="value">#wrap</span><span>&nbsp;{</span><span class="keyword">height</span><span>:&nbsp;</span><span class="value">auto</span><span>;&nbsp;</span><span class="keyword">min-height</span><span>:&nbsp;</span><span class="value">100%</span><span>;} &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="value">#main</span><span>&nbsp;{&nbsp;</span><span class="keyword">padding-bottom</span><span>:&nbsp;</span><span class="value">150px</span><span>;&nbsp;}&nbsp;&nbsp;</span><span class="comment">/*&nbsp;must&nbsp;be&nbsp;same&nbsp;height&nbsp;as&nbsp;the&nbsp;footer&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="value">#footer</span><span>&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">position</span><span>:&nbsp;</span><span class="value">relative</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">margin-top</span><span>:&nbsp;</span><span class="value">-150px</span><span>;&nbsp;</span><span class="comment">/*&nbsp;negative&nbsp;value&nbsp;of&nbsp;footer&nbsp;height&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">height</span><span>:&nbsp;</span><span class="value">150px</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">clear</span><span>:</span><span class="value">both</span><span>;}&nbsp; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span class="comment">/*&nbsp;CLEAR&nbsp;FIX*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>.clearfix:after&nbsp;{</span><span class="keyword">content</span><span>:&nbsp;</span><span class="string">"."</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">display</span><span>:&nbsp;</span><span class="value">block</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">height</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">clear</span><span>:&nbsp;</span><span class="value">both</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">visibility</span><span>:&nbsp;</span><span class="value">hidden</span><span>;} &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>.clearfix&nbsp;{</span><span class="keyword">display</span><span>:&nbsp;inline-</span><span class="value">block</span><span>;} &nbsp;&nbsp;</span></span></li>
        <li><span class="comment">/*&nbsp;Hides&nbsp;from&nbsp;IE-mac&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>*&nbsp;html&nbsp;.clearfix&nbsp;{&nbsp;</span><span class="keyword">height</span><span>:&nbsp;</span><span class="value">1%</span><span>;} &nbsp;&nbsp;</span></span></li>
        <li><span>.clearfix&nbsp;{</span><span class="keyword">display</span><span>:&nbsp;</span><span class="value">block</span><span>;} &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span class="comment">/*&nbsp;End&nbsp;hide&nbsp;from&nbsp;IE-mac&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  * { margin:0; padding:0; }
    html, body, #wrap { height: 100%; }
    body &gt; #wrap {height: auto; min-height: 100%;}
    #main { padding-bottom: 150px; }  /* must be same height as the footer */
    #footer {
    position: relative;
    margin-top: -150px; /* negative value of footer height */
    height: 150px;
    clear:both;}
    /* CLEAR FIX*/
    .clearfix:after {content: ".";
    display: block;
    height: 0;
    clear: both;
    visibility: hidden;}
    .clearfix {display: inline-block;}
    /* Hides from IE-mac */
    * html .clearfix { height: 1%;}
    .clearfix {display: block;}
    /* End hide from IE-mac */
    </pre>
    <p>&nbsp; </p>
    <p>As of recently i have had to use this over 50 times&#8230; i think this is one of the most important tricks you will learn today.</strong></p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3min-height_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="min-height" border="0" alt="min-height" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3min-height_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Cross-Browser Min Height</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.element&nbsp;{&nbsp;</span><span class="keyword">min-height</span><span>:</span><span class="value">600px</span><span>;&nbsp;</span><span class="keyword">height</span><span>:</span><span class="value">auto</span><span>&nbsp;</span><span class="important">!important</span><span>;&nbsp;</span><span class="keyword">height</span><span>:</span><span class="value">600px</span><span>;&nbsp;} &nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .element { min-height:600px; height:auto !important; height:600px; }
    </pre>
    <p>&nbsp; </p>
    <p>You can replace the min-height and heigth with 12em or another value that works for you.</p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3box-shadow_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="box-shadow" border="0" alt="box-shadow" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3box-shadow_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Box Shadow (CSS3)</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.box&nbsp;{&nbsp;box-shadow:&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">#666</span><span>;&nbsp;&nbsp;-moz-box-shadow:&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">#666</span><span>;&nbsp;&nbsp;-webkit-box-shadow:&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">5px</span><span>&nbsp;</span><span class="value">#666</span><span>;&nbsp;} &nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .box { box-shadow: 5px 5px 5px #666;  -moz-box-shadow: 5px 5px 5px #666;  -webkit-box-shadow: 5px 5px 5px #666; }
    </pre>
    <p>&nbsp; </p>
    <p>As you can see since this is a CSS3 property you will need all the three commands to make it cross browser(except for ie of course). The first 2 measurements are for horizontal offset and the vertical offset. The third number is for the blur radius. And the last is the color of the shadow.</p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3text-shadow_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="text-shadow" border="0" alt="text-shadow" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3text-shadow_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Text Shadow (CSS3) with IE hack</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.text&nbsp;{&nbsp;</span><span class="keyword">text-shadow</span><span>:&nbsp;</span><span class="value">1px</span><span>&nbsp;</span><span class="value">1px</span><span>&nbsp;</span><span class="value">1px</span><span>&nbsp;</span><span class="value">#666</span><span>;&nbsp;filter:&nbsp;Shadow(Color=</span><span class="value">#666666</span><span>,&nbsp;Direction=</span><span class="value">135</span><span>,&nbsp;Strength=</span><span class="value">5</span><span>);&nbsp;} &nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .text { text-shadow: 1px 1px 1px #666; filter: Shadow(Color=#666666, Direction=135, Strength=5); }
    </pre>
    <p>&nbsp; </p>
    <p>This technique is great for all modern browsers, the IE fix works but it is not amazing quality.</p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3opac_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="opac" border="0" alt="opac" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3opac_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Cross Browser CSS Opacity</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.</span><span class="value">transparent</span><span>&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/*&nbsp;Modern&nbsp;Browsers&nbsp;*/</span><span>&nbsp;opacity:&nbsp;</span><span class="value">0.7</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/*&nbsp;IE&nbsp;8&nbsp;*/</span><span>&nbsp;-ms-filter:&nbsp;</span><span class="string">"progid:DXImageTransform.Microsoft.Alpha(Opacity=70)"</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/*&nbsp;IE&nbsp;5-7&nbsp;*/</span><span>&nbsp;filter:&nbsp;alpha(opacity=</span><span class="value">70</span><span>); &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/*&nbsp;Netscape&nbsp;*/</span><span>&nbsp;-moz-opacity:&nbsp;</span><span class="value">0.7</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;</span><span class="comment">/*&nbsp;Safari&nbsp;1&nbsp;*/</span><span>&nbsp;-khtml-opacity:&nbsp;</span><span class="value">0.7</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .transparent {
    /* Modern Browsers */ opacity: 0.7;
    /* IE 8 */ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=70)";
    /* IE 5-7 */ filter: alpha(opacity=70);
    /* Netscape */ -moz-opacity: 0.7;
    /* Safari 1 */ -khtml-opacity: 0.7;
    }
    </pre>
    <p>&nbsp; </p>
    <p>Opacity can be used for plenty of elements, it adds a certain new age style we all strive for. <strong>Notice that in some browsers transperancy is inherited by all child elements!</strong></p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3reset_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="reset" border="0" alt="reset" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3reset_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    The Famous Meyer Reset</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>&nbsp;&nbsp;html,&nbsp;body,&nbsp;div,&nbsp;span,&nbsp;applet,&nbsp;object,&nbsp;iframe, &nbsp;&nbsp;</span></span></li>
        <li><span>h</span><span class="value">1</span><span>,&nbsp;h</span><span class="value">2</span><span>,&nbsp;h</span><span class="value">3</span><span>,&nbsp;h</span><span class="value">4</span><span>,&nbsp;h</span><span class="value">5</span><span>,&nbsp;h</span><span class="value">6</span><span>,&nbsp;p,&nbsp;blockquote,&nbsp;</span><span class="value">pre</span><span>, &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>a,&nbsp;abbr,&nbsp;acronym,&nbsp;address,&nbsp;big,&nbsp;cite,&nbsp;</span><span class="value">code</span><span>, &nbsp;&nbsp;</span></span></li>
        <li><span>del,&nbsp;dfn,&nbsp;em,&nbsp;font,&nbsp;img,&nbsp;ins,&nbsp;kbd,&nbsp;q,&nbsp;s,&nbsp;samp, &nbsp;&nbsp;</span></li>
        <li class="alt"><span class="value">small</span><span>,&nbsp;strike,&nbsp;strong,&nbsp;</span><span class="value">sub</span><span>,&nbsp;sup,&nbsp;tt,&nbsp;var, &nbsp;&nbsp;</span></span></li>
        <li><span>dl,&nbsp;dt,&nbsp;dd,&nbsp;ol,&nbsp;ul,&nbsp;li, &nbsp;&nbsp;</span></li>
        <li class="alt"><span>fieldset,&nbsp;form,&nbsp;label,&nbsp;legend, &nbsp;&nbsp;</span></li>
        <li><span>table,&nbsp;</span><span class="value">caption</span><span>,&nbsp;tbody,&nbsp;tfoot,&nbsp;thead,&nbsp;tr,&nbsp;th,&nbsp;td&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">margin</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">padding</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">border</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">outline</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">font-weight</span><span>:&nbsp;inherit; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">font-style</span><span>:&nbsp;inherit; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">font-size</span><span>:&nbsp;</span><span class="value">100%</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">font-family</span><span>:&nbsp;inherit; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">vertical-align</span><span>:&nbsp;</span><span class="value">baseline</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>} &nbsp;&nbsp;</span></li>
        <li class="alt"><span class="comment">/*&nbsp;remember&nbsp;to&nbsp;define&nbsp;focus&nbsp;styles!&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>:focus&nbsp;{ &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">outline</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>} &nbsp;&nbsp;</span></li>
        <li class="alt"><span>body&nbsp;{ &nbsp;&nbsp;</span></li>
        <li><span>&nbsp;</span><span class="keyword">line-height</span><span>:&nbsp;</span><span class="value">1</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">color</span><span>:&nbsp;</span><span class="value">black</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">background</span><span>:&nbsp;</span><span class="value">white</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
        <li><span>ol,&nbsp;ul&nbsp;{ &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">list-style</span><span>:&nbsp;</span><span class="value">none</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>} &nbsp;&nbsp;</span></li>
        <li class="alt"><span class="comment">/*&nbsp;tables&nbsp;still&nbsp;need&nbsp;'cellspacing="0"'&nbsp;in&nbsp;the&nbsp;markup&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li><span>table&nbsp;{ &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">border-collapse</span><span>:&nbsp;</span><span class="value">separate</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">border-spacing</span><span>:&nbsp;</span><span class="value">0</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
        <li><span class="value">caption</span><span>,&nbsp;th,&nbsp;td&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">text-align</span><span>:&nbsp;</span><span class="value">left</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">font-weight</span><span>:&nbsp;</span><span class="value">normal</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
        <li><span>blockquote:before,&nbsp;blockquote:after, &nbsp;&nbsp;</span></li>
        <li class="alt"><span>q:before,&nbsp;q:after&nbsp;{ &nbsp;&nbsp;</span></li>
        <li><span>&nbsp;</span><span class="keyword">content</span><span>:&nbsp;</span><span class="string">""</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
        <li><span>blockquote,&nbsp;q&nbsp;{ &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;</span><span class="keyword">quotes</span><span>:&nbsp;</span><span class="string">""</span><span>&nbsp;</span><span class="string">""</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>} &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  html, body, div, span, applet, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
    a, abbr, acronym, address, big, cite, code,
    del, dfn, em, font, img, ins, kbd, q, s, samp,
    small, strike, strong, sub, sup, tt, var,
    dl, dt, dd, ol, ul, li,
    fieldset, form, label, legend,
    table, caption, tbody, tfoot, thead, tr, th, td {
    margin: 0;
    padding: 0;
    border: 0;
    outline: 0;
    font-weight: inherit;
    font-style: inherit;
    font-size: 100%;
    font-family: inherit;
    vertical-align: baseline;
    }
    /* remember to define focus styles! */
    :focus {
    outline: 0;
    }
    body {
    line-height: 1;
    color: black;
    background: white;
    }
    ol, ul {
    list-style: none;
    }
    /* tables still need 'cellspacing="0"' in the markup */
    table {
    border-collapse: separate;
    border-spacing: 0;
    }
    caption, th, td {
    text-align: left;
    font-weight: normal;
    }
    blockquote:before, blockquote:after,
    q:before, q:after {
    content: "";
    }
    blockquote, q {
    quotes: "" "";
    }
    </pre>
    <p>&nbsp; </p>
    <p>This is the most useful css reset out there, i use it for almost everything I work on (even the 52framework, coming soon).</p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3dotted_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="dotted" border="0" alt="dotted" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3dotted_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Removing the dotted outlines</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>a,&nbsp;a:active&nbsp;{&nbsp;</span><span class="keyword">outline</span><span>:&nbsp;</span><span class="value">none</span><span>;&nbsp;} &nbsp;&nbsp;</span></span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  a, a:active { outline: none; }
    </pre>
    <p>&nbsp; </p>
    <p>I find myself getting very annoyed with the dotted outline (especially for text-indented elements that are off the page).</strong></p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3rounded_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="rounded" border="0" alt="rounded" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3rounded_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Rounded Corners (non ie)</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.element&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;-moz-border-radius:&nbsp;</span><span class="value">5px</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>&nbsp;-webkit-border-radius:&nbsp;</span><span class="value">5px</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;border-radius:&nbsp;</span><span class="value">5px</span><span>;&nbsp;</span><span class="comment">/*&nbsp;future&nbsp;proofing&nbsp;*/</span><span>&nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
        <li><span>.element-top-left-corner&nbsp;{ &nbsp;&nbsp;</span></li>
        <li class="alt"><span>&nbsp;-moz-border-radius-topleft:&nbsp;</span><span class="value">5px</span><span>; &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;-webkit-border-top-left-radius:&nbsp;</span><span class="value">5px</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .element {
    -moz-border-radius: 5px;
    -webkit-border-radius: 5px;
    border-radius: 5px; /* future proofing */
    }
    .element-top-left-corner {
    -moz-border-radius-topleft: 5px;
    -webkit-border-top-left-radius: 5px;
    }
    </pre>
    <p>&nbsp; </p>
    <p>Love rounded corners? Don&#8217;t want to slave over images and elements to get the effect? This is your solution, and elements still look fine in ie.</strong></p>
    <p>&nbsp; </p>
    </li>
    <p>&nbsp; </p>
    <li>
    <p><strong><br />
    &nbsp; &nbsp; <br />
    <a href="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3import_2.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="import" border="0" alt="import" src="http://webdevmania.com/images/uploads/WindowsLiveWriterTop10CSSSnippets_11DE3import_thumb.jpg" width="162" height="123" /></a> </p>
    <p>&nbsp; &nbsp; <br />
    Override Inline Styles</strong> </p>
    <p>&nbsp; <br />
    The CSS </p>
    <p>&nbsp; </p>
    <div class="dp-highlighter">
    <div class="bar">
    <div class="tools"><a onclick="dp.sh.Toolbar.Command('ViewSource',this);return false;" href="#">view plain</a><a onclick="dp.sh.Toolbar.Command('CopyToClipboard',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">copy to clipboard</a><a onclick="dp.sh.Toolbar.Command('PrintSource',this);return false;" href="#">print</a><a onclick="dp.sh.Toolbar.Command('About',this);return false;" href="http://www.blogjava.net/rain1102/admin/EditPosts.aspx?opt=1#">?</a></div>
    </div>
    <ol class="dp-css">
        <li class="alt"><span><span>.override&nbsp;{ &nbsp;&nbsp;</span></span></li>
        <li><span>&nbsp;</span><span class="keyword">font-size</span><span>:&nbsp;</span><span class="value">14px</span><span>&nbsp;</span><span class="important">!important</span><span>; &nbsp;&nbsp;</span></span></li>
        <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    </ol>
    </div>
    <pre style="display: none" class="css" name="code">  .override {
    font-size: 14px !important;
    }
    </pre>
    <p>&nbsp; </p>
    <p>This comes in handy plenty of times, I personally use it way too much <img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" alt="smile" src="http://webdevmania.com/images/smileys/smile.gif" width="19" height="19" /> everytime something doesn&#8217;t work I test if its just not being applied because of some other style.</strong></p>
    </li>
</ol><img src ="http://www.blogjava.net/rain1102/aggbug/308123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2010-01-04 08:46 <a href="http://www.blogjava.net/rain1102/archive/2010/01/04/308123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>REST in Spring 3: @MVC</title><link>http://www.blogjava.net/rain1102/archive/2009/12/24/307201.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 24 Dec 2009 11:53:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/12/24/307201.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/307201.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/12/24/307201.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/307201.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/307201.html</trackback:ping><description><![CDATA[<p>In the last couple of years, REST has emerged as a compelling alternative to SOAP/WSDL/WS-*-based distributed architectures. So when we started to plan our work on the next major release of Spring &#8211; version 3.0, it was quite clear to us that we had to focus on making the development of 'RESTful' Web services and applications easier. Now, what is and isn't 'RESTful' could be the topic of a whole new post all together; in this post I'll take a more practical approach, and focus on the features that we added to the @Controller model of Spring MVC.</p>
<h2>A Bit of Background</h2>
<p><em>Ok, I lied: there is some background first. If you really want to learn about the new features, feel free to skip to the <a href="http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/#features">next section</a>.</em></p>
<p>For me, work on REST started about two years ago, shortly after reading the highly recommended book <a onclick="javascript:urchinTracker('/outbound/oreilly.com');" href="http://oreilly.com/catalog/9780596529260/index.html">RESTful Web Services</a> from O'Reilly, by Leonard Richardson and Sam Ruby. Initially, I was thinking about adding REST support to <a onclick="javascript:urchinTracker('/outbound/www.springsource.org');" href="http://www.springsource.org/spring-ws">Spring Web Services</a>, but after working a couple of weeks on a prototype, it became clear to me that this wasn't a very good fit. In particular, I found out that I had to copy most of the logic from the Spring-MVC <tt>DispatcherServlet</tt> over to Spring-WS. Clearly, this was not the way to go forward.</p>
<p>Around the same time we introduced the <a href="http://blog.springsource.com/2007/11/14/annotated-web-mvc-controllers-in-spring-25/">annotation-based model of Spring MVC</a>. This model was clearly an improvement to the former, inheritance-based model. Another interesting development at that time was the development of the <a onclick="javascript:urchinTracker('/outbound/jcp.org');" href="http://jcp.org/en/jsr/detail?id=311">JAX-RS</a> specification. My next attempt was to try and merge these two models: to try and combine the @MVC annotations with the JAX-RS annotations, and to be able to run JAX-RS applications within the <tt>DispatcherServlet</tt>. While I did get a working prototype out of this effort, the result was not satisfactory. There were a number of technical issues which I won't bore you with, but most importantly the approach felt 'clunky' and unnatural for a developer who was already used to Spring MVC 2.5.</p>
<p>Finally, we decided to add the RESTful functionality to features to Spring MVC itself. Obviously, that would mean that there would be some overlap with JAX-RS, but at least the programming model would be satisfactory for Spring MVC developers, both existing and new ones. Additionally, there are already three JAX-RS implementations offering Spring support (<a href="https://jersey.dev.java.net/">Jersey</a>, <a onclick="javascript:urchinTracker('/outbound/www.jboss.org');" href="http://www.jboss.org/resteasy/">RESTEasy</a>, and <a onclick="javascript:urchinTracker('/outbound/www.restlet.org');" href="http://www.restlet.org/">Restlet</a>). Adding a fourth to this list did not seem a good use of our valuable time.</p>
<h2><a name="features" modo="false">RESTful features in Spring MVC 3.0</a></h2>
<p>Now, enough of the background, let's look at the features!</p>
<h3>URI Templates</h3>
<p>A URI template is a URI-like string, containing one or more variable names. When these variables are substituted for values, the template becomes a URI. For more information, see the <a onclick="javascript:urchinTracker('/outbound/bitworking.org');" href="http://bitworking.org/projects/URI-Templates/">proposed RFC</a>.</p>
<p>In Spring 3.0 M1, we introduced the use of URI templates through the <tt>@PathVariable</tt> annotation. For instance:</p>
<div class="syntaxhighlighter " id="highlighter_205437">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">1.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@RequestMapping</code><code class="plain">(</code><code class="string">"/hotels/{hotelId}"</code><code class="plain">) </code></span></span></div>
<div class="line alt2"><code class="number">2.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="plain">String getHotel(</code><code class="color1">@PathVariable</code> <code class="plain">String hotelId, Model model) { </code></span></span></div>
<div class="line alt1"><code class="number">3.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">List&lt;Hotel&gt; hotels = hotelService.getHotels(); </code></span></span></div>
<div class="line alt2"><code class="number">4.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">model.addAttribute(</code><code class="string">"hotels"</code><code class="plain">, hotels); </code></span></span></div>
<div class="line alt1"><code class="number">5.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="keyword">return</code> <code class="string">"hotels"</code><code class="plain">; </code></span></span></div>
<div class="line alt2"><code class="number">6.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">}</code></span></span></div>
</div>
</div>
<p>When a request comes in for <tt>/hotels/1</tt>, that 1 will be bound to the <tt>hotelId</tt> parameter. You can optionally specify the variable name the parameter is bound to, but when you compile your code with debugging enabled that is not necessary: we infer the path variable name from the parameter name.</p>
<p>You can also have more than one path variable, like so:</p>
<div class="syntaxhighlighter " id="highlighter_13061">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">1.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@RequestMapping</code><code class="plain">(value=</code><code class="string">"/hotels/{hotel}/bookings/{booking}"</code><code class="plain">, method=RequestMethod.GET) </code></span></span></div>
<div class="line alt2"><code class="number">2.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="plain">String getBooking(</code><code class="color1">@PathVariable</code><code class="plain">(</code><code class="string">"hotel"</code><code class="plain">) </code><code class="keyword">long</code> <code class="plain">hotelId, </code><code class="color1">@PathVariable</code><code class="plain">(</code><code class="string">"booking"</code><code class="plain">) </code><code class="keyword">long</code> <code class="plain">bookingId, Model model) { </code></span></span></div>
<div class="line alt1"><code class="number">3.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">Hotel hotel = hotelService.getHotel(hotelId); </code></span></span></div>
<div class="line alt2"><code class="number">4.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">Booking booking = hotel.getBooking(bookingId); </code></span></span></div>
<div class="line alt1"><code class="number">5.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">model.addAttribute(</code><code class="string">"booking"</code><code class="plain">, booking); </code></span></span></div>
<div class="line alt2"><code class="number">6.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="keyword">return</code> <code class="string">"booking"</code><code class="plain">; </code></span></span></div>
<div class="line alt1"><code class="number">7.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">}</code></span></span></div>
</div>
</div>
<p>This would match requests like <tt>/hotels/1/bookings/2</tt>, for instance.</p>
<p>You can also combine the use of Ant-style paths and path variables, like so:</p>
<div class="syntaxhighlighter " id="highlighter_8191">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">1.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@RequestMapping</code><code class="plain">(value=</code><code class="string">"/hotels/*/bookings/{booking}"</code><code class="plain">, method=RequestMethod.GET) </code></span></span></div>
<div class="line alt2"><code class="number">2.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="plain">String getBooking(</code><code class="color1">@PathVariable</code><code class="plain">(</code><code class="string">"booking"</code><code class="plain">) </code><code class="keyword">long</code> <code class="plain">bookingId, Model model) { </code></span></span></div>
<div class="line alt1"><code class="number">3.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">... </code></span></span></div>
<div class="line alt2"><code class="number">4.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">}</code></span></span></div>
</div>
</div>
<p>and you can use data binding, too:</p>
<div class="syntaxhighlighter " id="highlighter_311065">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">01.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@InitBinder</code></span></span></div>
<div class="line alt2"><code class="number">02.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="keyword">void</code> <code class="plain">initBinder(WebDataBinder binder) { </code></span></span></div>
<div class="line alt1"><code class="number">03.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">SimpleDateFormat dateFormat = </code><code class="keyword">new</code> <code class="plain">SimpleDateFormat(</code><code class="string">"yyyy-MM-dd"</code><code class="plain">); </code></span></span></div>
<div class="line alt2"><code class="number">04.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">binder.registerCustomEditor(Date.</code><code class="keyword">class</code><code class="plain">, </code><code class="keyword">new</code> <code class="plain">CustomDateEditor(dateFormat, </code><code class="keyword">false</code><code class="plain">)); </code></span></span></div>
<div class="line alt1"><code class="number">05.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">} </code></span></span></div>
<div class="line alt2"><code class="number">06.</code><span class="content"><code class="spaces">&nbsp;</code><span class="block" style="margin-left: 7px! important">&nbsp;</span></span></div>
<div class="line alt1"><code class="number">07.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@RequestMapping</code><code class="plain">(</code><code class="string">"/hotels/{hotel}/dates/{date}"</code><code class="plain">) </code></span></span></div>
<div class="line alt2"><code class="number">08.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="keyword">void</code> <code class="plain">date(</code><code class="color1">@PathVariable</code><code class="plain">(</code><code class="string">"hotel"</code><code class="plain">) String hotel, </code><code class="color1">@PathVariable</code> <code class="plain">Date date) { </code></span></span></div>
<div class="line alt1"><code class="number">09.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">... </code></span></span></div>
<div class="line alt2"><code class="number">10.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">}</code></span></span></div>
</div>
</div>
<p>The above would match <tt>/hotels/1/dates/2008-12-18</tt>, for instance.</p>
<h3>Content Negotiation</h3>
<p>In version 2.5, Spring-MVC lets the @Controller decide which view to render for a given request, through its <tt>View</tt>, view name, and <tt>ViewResolver</tt> abstractions. In a RESTful scenario, it is common to let the client decide the acceptable representations, via the <tt>Accept</tt> HTTP header. The server responds with the delivered representation via the <tt>Content-Type</tt> header. This process is known as <a onclick="javascript:urchinTracker('/outbound/en.wikipedia.org');" href="http://en.wikipedia.org/wiki/Content_negotiation">content negotiation</a>.</p>
<p>One issue with the <tt>Accept</tt> header is that is impossible to change it in a web browser, in HTML. For instance, in Firefox, it's fixed to</p>
<div class="codesnip-container">Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</div>
<p>So what if you want to link to a PDF version of a particular resource? Looking at the file extension is a good workaround. For example, <tt>http://example.com/hotels.pdf</tt> retrieves the PDF view of the hotel list, as does <tt>http://example.com/hotels</tt> with an Accept header of <tt>application/pdf</tt>.</p>
<p>This is what the <tt>ContentNegotiatingViewResolver</tt> does: it wraps one or more other <tt>ViewResolver</tt>s, looks at the <tt>Accept</tt> header or file extension, and resolves a view corresponding to these. In an upcoming blog post, Alef Arendsen will show you how to use the <tt>ContentNegotiatingViewResolver</tt>.</p>
<h3>Views</h3>
<p>We also added some new Views to Spring MVC, particularly:</p>
<ul>
    <li>the <a onclick="javascript:urchinTracker('/outbound/static.springsource.org');" href="http://static.springsource.org/spring/docs/3.0.0.M1/javadoc-api/org/springframework/web/servlet/view/feed/AbstractAtomFeedView.html"><tt>AbstractAtomFeedView</tt></a> and <a onclick="javascript:urchinTracker('/outbound/static.springsource.org');" href="http://static.springsource.org/spring/docs/3.0.0.M1/javadoc-api/org/springframework/web/servlet/view/feed/AbstractRssFeedView.html"><tt>AbstractRssFeedView</tt></a>, which can be used to return an Atom and RSS feed,
    <li>the <a onclick="javascript:urchinTracker('/outbound/static.springframework.org');" href="http://static.springframework.org/spring/docs/3.0.0.M2/javadoc-api/org/springframework/web/servlet/view/xml/MarshallingView.html"><tt>MarshallingView</tt></a>, which can be used to return an XML representation. This view is based on the Object/XML Mapping module, which has been copied from the Spring Web Services project. This module wraps XML marshalling technologies such as JAXB, Castor, JiBX, and more, and makes it easier to configure these within a Spring application context,
    <li>the <tt>JacksonJsonView</tt>, for JSON representations of objects in your model. This view is actually part of the Spring JavaScript project, which we'll talk about more in a future blog post. </li>
</ul>
<p>Obviously, these work great in combination with the <tt>ContentNegotiatingViewResolver</tt>!</p>
<h3>HTTP Method Conversion</h3>
<p>Another key principle of REST is the use of the Uniform Interface. Basically, this means that all resources (URLs) can be manipulated using the same four HTTP method: GET, PUT, POST, and DELETE. For each of methods, the HTTP specification defines exact semantics. For instance, a GET should always be a safe operation, meaning that is has no side effects, and a PUT or DELETE should be idempotent, meaning that you can repeat these operations over and over again, but the end result should be the same.</p>
<p>While HTTP defines these four methods, HTML only supports two: GET and POST. Fortunately, there are two possible workarounds: you can either use JavaScript to do your PUT or DELETE, or simply do a POST with the 'real' method as an additional parameter (modeled as a hidden input field in an HTML form). This latter trick is what the <tt>HiddenHttpMethodFilter</tt> does. This filter was introduced in Spring 3.0 M1, and is a plain Servlet Filter. As such, it can be used in combination with any web framework (not just Spring MVC). Simply add this filter to your <tt>web.xml</tt>, and a POST with a hidden <tt>_method</tt> parameter will be converted into the corresponding HTTP method request.</p>
<p>As an extra bonus, we've also added support for method conversion in the Spring MVC form tags. For example, the following snippet taken from the updated Petclinic sample:</p>
<div class="syntaxhighlighter " id="highlighter_354227">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">1.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">&lt;</code><code class="keyword">form:form</code> <code class="color1">method</code><code class="plain">=</code><code class="string">"delete"</code><code class="plain">&gt; </code></span></span></div>
<div class="line alt2"><code class="number">2.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="plain">&lt;</code><code class="keyword">p</code> <code class="color1">class</code><code class="plain">=</code><code class="string">"submit"</code><code class="plain">&gt;&lt;</code><code class="keyword">input</code> <code class="color1">type</code><code class="plain">=</code><code class="string">"submit"</code> <code class="color1">value</code><code class="plain">=</code><code class="string">"Delete Pet"</code><code class="plain">/&gt;&lt;/</code><code class="keyword">p</code><code class="plain">&gt; </code></span></span></div>
<div class="line alt1"><code class="number">3.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">&lt;/</code><code class="keyword">form:form</code><code class="plain">&gt;</code></span></span></div>
</div>
</div>
<p>will actually perform an HTTP POST, with the 'real' DELETE method hidden behind a request parameter, to be picked up by the <tt>HiddenHttpMethodFilter</tt>. The corresponding @Controller method is therefore:</p>
<div class="syntaxhighlighter " id="highlighter_172114">
<div class="toolbar">&nbsp;</div>
<div class="lines">
<div class="line alt1"><code class="number">1.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="color1">@RequestMapping</code><code class="plain">(method = RequestMethod.DELETE) </code></span></span></div>
<div class="line alt2"><code class="number">2.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="keyword">public</code> <code class="plain">String deletePet(</code><code class="color1">@PathVariable</code> <code class="keyword">int</code> <code class="plain">ownerId, </code><code class="color1">@PathVariable</code> <code class="keyword">int</code> <code class="plain">petId) { </code></span></span></div>
<div class="line alt1"><code class="number">3.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="keyword">this</code><code class="plain">.clinic.deletePet(petId); </code></span></span></div>
<div class="line alt2"><code class="number">4.</code><span class="content"><code class="spaces">&nbsp;&nbsp;&nbsp;&nbsp;</code><span class="block" style="margin-left: 28px! important"><code class="keyword">return</code> <code class="string">"redirect:/owners/"</code> <code class="plain">+ ownerId; </code></span></span></div>
<div class="line alt1"><code class="number">5.</code><span class="content"><span class="block" style="margin-left: 0px! important"><code class="plain">}</code></span></span></div>
</div>
</div>
<h3>ETag support</h3>
<p>An <a onclick="javascript:urchinTracker('/outbound/en.wikipedia.org');" href="http://en.wikipedia.org/wiki/HTTP_ETag">ETag</a> (entity tag) is an HTTP response header returned by an HTTP/1.1 compliant web server used to determine change in content at a given URL. It can be considered to be the more sophisticated successor to the <tt>Last-Modified</tt> header. When a server returns a representation with an ETag header, client can use this header in subsequent GETs, in a <tt>If-None-Match</tt> header. If the content has not changed, the server will return <tt>304: Not Modified</tt>.</p>
<p>In Spring 3.0 M1, we introduced the <tt>ShallowEtagHeaderFilter</tt>. This is a plain Servlet Filter, and thus can be used in combination any web framework. As the name indicates, the filter creates so-called <em>shallow</em> ETags (as opposed to a deep ETags, more about that later). The way it works is quite simple: the filter simply caches the content of the rendered JSP (or other content), generates a MD5 hash over that, and returns that as a <tt>ETag</tt> header in the response. The next time a client sends a request for the same resource, it use that hash as the <tt>If-None-Match</tt> value. The filter notices this, renders the view again, and compares the two hashes. If they are equal, a 304 is returned. It is important to note that this filter will not save processing power, as the view is still rendered. The only thing it saves is <strong>bandwith</strong>, as the rendered response is not sent back over the wire.</p>
<p><em>Deep</em> ETags are a bit more complicated. In this case, the ETag is based on the underlying domain objects, RDMBS tables, etc. Using this approach, no content is generated unless the underlying data has changed. Unfortunately, implementing this approach in a generic way is much more difficult than shallow ETags. We might add support for deep ETags in a later version of Spring, by relying on JPA's @Version annotation, or an AspectJ aspect for instance.</p>
<h2>And more!</h2>
<p>In a following post, I will conclude my RESTful journey, and talk about the <tt>RestTemplate</tt>, which was also introduced in Spring 3.0 M2. This class gives you client-side access to RESTful resources in a fashion similar to the <tt>JdbcTemplate</tt>, <tt>JmsTemplate</tt>, etc.<br />
</p>
<h2>Similar Posts</h2>
<ul class="similar-posts">
    <li><a title="March 27, 2009" href="http://blog.springsource.com/2009/03/27/rest-in-spring-3-resttemplate/" rel="bookmark">REST in Spring 3: RestTemplate</a>
    <li><a title="March 16, 2009" href="http://blog.springsource.com/2009/03/16/adding-an-atom-view-to-an-application-using-springs-rest-support/" rel="bookmark">Adding an Atom view to an application using Spring's REST support</a>
    <li><a title="July 10, 2009" href="http://blog.springsource.com/2009/07/10/pluggable-styling-with-springsource-slices/" rel="bookmark">Pluggable styling with SpringSource Slices</a>
    <li><a title="March 29, 2007" href="http://blog.springsource.com/2007/03/29/aop-context-binding/" rel="bookmark">AOP Context Binding With Named Pointcuts</a>
    <li><a title="November 14, 2007" href="http://blog.springsource.com/2007/11/14/annotated-web-mvc-controllers-in-spring-25/" rel="bookmark">Annotated Web MVC Controllers in Spring 2.5</a> </li>
</ul>
<br />
<br />
原文地址：http://blog.springsource.com/2009/03/08/rest-in-spring-3-mvc/<img src ="http://www.blogjava.net/rain1102/aggbug/307201.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-12-24 19:53 <a href="http://www.blogjava.net/rain1102/archive/2009/12/24/307201.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Install JChem Cartridge for Oracle</title><link>http://www.blogjava.net/rain1102/archive/2009/12/22/306941.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Tue, 22 Dec 2009 12:10:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/12/22/306941.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/306941.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/12/22/306941.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/306941.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/306941.html</trackback:ping><description><![CDATA[&nbsp;
<p style="text-align: center" align="center"><strong><span style="font-size: 15pt; font-family: 'Verdana','sans-serif'">Install JChem Cartridge for Oracle</span></strong></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt"><strong>1．</strong><strong><span style="font-family: 宋体">软件需求</span></strong></p>
<p style="margin-left: 18pt">JDK 1.4.2<span style="font-family: 宋体">或以上版本，由于性能原因推荐使用</span><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> 1.5<span style="font-family: 宋体">或以上版本。</span></p>
<p style="margin-left: 18pt">9i R2<span style="font-family: 宋体">或以上版本（本文使用</span>10g Enterprise Edition Release 10.2.0.1.0<span style="font-family: 宋体">）</span></p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt"><strong>2．</strong><strong><span style="font-family: 宋体">配置</span>JChem Server</strong></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-size: 6.5pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span><span style="font-family: 宋体">设置以下环境变量：</span></p>
<p style="margin-left: 39pt; text-indent: 3pt">JAVA_HOME=</p>
<p style="margin-left: 36pt; text-indent: 6pt">JAVA_HEAP_SIZE=700M</p>
<p style="margin-left: 33pt; text-indent: 9pt"><span style="font-family: 宋体">如果</span>JChem Server<span style="font-family: 宋体">和</span>Oracle Server<span style="font-family: 宋体">在一台服务器上，还需要设置以下环境变量：</span></p>
<p style="margin-left: 30pt; text-indent: 12pt">ORACLE_HOME=&lt;ORACLE<span style="font-family: 宋体">目录</span>&gt;"product"10.2.0"db_1</p>
<p style="margin-left: 27pt; text-indent: 15pt">ORACLE_JDBC_DRIVER=&lt;ORACLE<span style="font-family: 宋体">目录</span>&gt;"product"10.2.0"db_1"jdbc"lib"ojdbc14.jar</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">否则就在</span>Oracle Server<span style="font-family: 宋体">上面设置以上两个环境变量。</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-size: 6.5pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span><span style="font-family: 宋体">设置</span>JChem Server<span style="font-family: 宋体">连接</span>Oracle Server<span style="font-family: 宋体">参数</span></p>
<p style="margin-left: 39pt; text-indent: 3pt"><span style="font-family: 宋体">修改</span>cartridge"conf<span style="font-family: 宋体">下面的</span>jcart.properties<span style="font-family: 宋体">文件</span></p>
<p style="margin-left: 36pt; text-indent: 8.2pt"># The name of the JChem Server host as seen from the Oracle Server host</p>
<p style="margin-left: 32.95pt; text-indent: 13.45pt">jchem.server.host=172.29.128.203</p>
<p style="margin-left: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p style="margin-left: 30.05pt; text-indent: 16.5pt"># The port at which JChem Server listens</p>
<p style="margin-left: 27pt; text-indent: 19.3pt">jchem.server.port=1099</p>
<p style="margin-left: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p style="margin-left: 24.05pt; text-indent: 22.35pt"># The name of the Oracle Server host as seen from the JChem Server host</p>
<p style="margin-left: 21pt; text-indent: 25.3pt">oracle.server.host=172.29.128.203</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p style="margin-left: 32.95pt; text-indent: 13.45pt"># The port at which the Oracle Server listens</p>
<p style="margin-left: 30.05pt; text-indent: 16.5pt">oracle.server.port=1521</p>
<p style="margin-left: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p style="margin-left: 27pt; text-indent: 19.3pt"># The name of the Oracle database instance (aka SID)</p>
<p style="margin-left: 24.05pt; text-indent: 22.35pt">oracle.server.instance=jchem</p>
<p style="margin-left: 18pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;</p>
<p style="margin-left: 21pt; text-indent: 25.3pt">oracle.server.login=jchem</p>
<p style="margin-left: 15pt; text-indent: 31.5pt">oracle.server.password=f0und3r</p>
<p style="margin-left: 15pt; text-indent: 31.5pt"><span style="font-family: 宋体">注意这里如果</span>JChem Server<span style="font-family: 宋体">和</span>Oracle Server<span style="font-family: 宋体">不在一台机器上，这注意它们的</span>host</p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-size: 6.5pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span><span style="font-family: 宋体">注册</span>license</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">在</span>cartridge<span style="font-family: 宋体">下创建一个</span>licenses<span style="font-family: 宋体">文件夹，并拷入</span>license.cxl<span style="font-family: 宋体">文件</span></p>
<p style="margin-left: 42pt; text-indent: -21pt; tab-stops: list 42.0pt"><span style="font-size: 6.5pt; font-family: Wingdings">l<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp; </span></span><span style="font-family: 宋体">启动</span>JChem Server</p>
<p style="margin-left: 42pt"><span style="font-family: 宋体">在命令行里执行</span> server start &nbsp;&nbsp;&nbsp;(cd <span style="font-family: 宋体">到</span>cartridge<span style="font-family: 宋体">文件夹下</span>)</p>
<p style="margin-left: 18pt; text-indent: -18pt; tab-stops: list 18.0pt">3．&nbsp;<span style="font-family: 宋体">配置</span>Oracle Server<span style="font-family: 宋体">（如果</span>JChem Server<span style="font-family: 宋体">和</span>Oracle Server<span style="font-family: 宋体">不在一台机器上）</span></p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">设置</span>ORACLE_HOME<span style="font-family: 宋体">和</span>ORACLE_JDBC_DRIVER<span style="font-family: 宋体">环境变量</span></p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">打开</span>SQL<span style="font-family: 宋体">命令行，执行一下命令：</span></p>
<p style="margin-left: 18pt">call <span style="color: #333333">dbms_java.grant_permission( '<strong>JCHEM</strong>', 'SYS:java.net.SocketPermission', ' <strong>jchem.server.host<span style="color: #333333"> :</span> jchem.server.port</strong><span style="color: #333333">', 'connect,resolve' )</span></span></p>
<p style="margin-left: 18pt"><span style="color: #333333">call dbms_java.grant_permission( <strong>'JCHEM'</strong>, 'SYS:java.lang.RuntimePermission', 'shutdownHooks', '')</span></p>
<p style="margin-left: 18pt"><span style="color: #333333">call&nbsp;dbms_java.grant_permission( <strong>'JCHEM'</strong>, 'SYS:java.util.logging.LoggingPermission', 'control', '' )</span></p>
<p style="margin-left: 18pt"><span style="color: #333333; font-family: 宋体">这里的</span><span style="color: #333333">JCHEM</span><span style="color: #333333; font-family: 宋体">就是你数据库用户名，</span>jchem.server.host<span style="color: #333333"> : jchem.server.port</span><span style="font-family: 宋体">为你的</span>JChem Server<span style="font-family: 宋体">的</span>host<span style="font-family: 宋体">和</span>port<span style="font-family: 宋体">。</span></p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">在</span>cartridge<span style="font-family: 宋体">目录下执行如下命令：</span></p>
<p style="margin-left: 18pt">Install username/password[@connect_string] [&lt;jchem.server.host&gt;:&lt;jchem.server.port&gt;]</p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">完成以上不走就可以测试了。</span></p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">在</span>SQL<span style="font-family: 宋体">命令行中输入：</span></p>
<p style="margin-left: 18pt"><span style="color: #333333">call jchem_core_pkg.use_password('&lt;passwd&gt;');</span></p>
<p style="margin-left: 18pt">select jchem_core_pkg.getEnvironment() from dual;</p>
<p style="margin-left: 18pt"><span style="font-family: 宋体">运行结果如下：</span></p>
<p style="margin-left: 18pt"><span style="color: blue">JCHEM_CORE_PKG.GETENVIRONMENT(</span></p>
<p style="margin-left: 18pt"><span style="color: blue">--------------------------------------------------------------------------------</span></p>
<p style="margin-left: 18pt"><span style="color: blue">Oracle environment:</span></p>
<p style="margin-left: 18pt"><span style="color: blue">Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod</span></p>
<p style="margin-left: 18pt"><span style="color: blue">PL/SQL Release 10.2.0.1.0 - Production</span></p>
<p style="margin-left: 18pt"><span style="color: blue">CORE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10.2.0.1.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Production</span></p>
<p style="margin-left: 18pt"><span style="color: blue">TNS for 32-bit Windows: Version 10.2.0.1.0 - Production</span></p>
<p style="margin-left: 18pt"><span style="color: blue">NLSRTL Version 10.2.0.1.0 - Production</span></p>
<p style="margin-left: 18pt"><span style="color: blue">JChem Server environment:</span></p>
<p style="margin-left: 18pt"><span style="color: blue"><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> VM vendor: Sun Microsystems Inc.</span></p>
<p style="margin-left: 18pt"><span style="color: blue"><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> version: 1.6.0_10</span></p>
<p style="margin-left: 18pt"><span style="color: blue"><a title="Java爱好者" href="http://www.blogjava.net/rain1102" >Java</a> VM version: 11.0-b15</span></p>
<p style="margin-left: 18pt"><span style="color: blue">JChem version: 5.1.3_2</span></p>
<p style="margin-left: 18pt"><span style="color: blue">JChem Index version: 50103</span></p>
<p style="margin-left: 18pt"><span style="color: blue">JDBC driver version: 10.2.0.1.0</span></p><img src ="http://www.blogjava.net/rain1102/aggbug/306941.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-12-22 20:10 <a href="http://www.blogjava.net/rain1102/archive/2009/12/22/306941.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Jbpm4.2+tomcat6+oracle9i安装过程[转载]</title><link>http://www.blogjava.net/rain1102/archive/2009/12/03/304687.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Thu, 03 Dec 2009 11:48:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/12/03/304687.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/304687.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/12/03/304687.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/304687.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/304687.html</trackback:ping><description><![CDATA[原文地址：http://blog.chinaunix.net/u/21752/showart_2097331.html<br />
<span style="font-weight: bold; color: rgb(153,1,2)">1.软件清单</span><br />
&nbsp;&nbsp; jdk1.6<br />
&nbsp;&nbsp; jbpm4.2<br />
&nbsp;&nbsp; tomcat6<br />
&nbsp;&nbsp; oracle9i<br />
&nbsp;&nbsp; ant1.7<br />
&nbsp;&nbsp; eclipse-jee-galileo-win32<br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">2.配置JDK1.6</span><br />
&nbsp;&nbsp; 在系统路径上添加<br />
&nbsp;&nbsp; JAVA_HOME=c:\java\jdk16(我的JDK1.6安装目录)<br />
&nbsp;&nbsp; CLASS_PATH=.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\jre\lib\rt.jar;<br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">3.配置ANT</span><br />
&nbsp;&nbsp; 在系统路径上添加<br />
&nbsp;&nbsp; ANT_HOME=c:\java\ant<br />
&nbsp;&nbsp; path=%ANT_HOME%\bin<br />
<br />
4.配置数据库(使用Oracle,默认使用的是hsqldb)<br />
&nbsp;&nbsp; (1)将class12.jar复制到jbpm-4.2\lib目录下，否则找不到驱动<br />
&nbsp;&nbsp; (2)进入c:\jbpm-4.2\install\jdbc目录修改文件oracle.properties文件，设置你自己的oracle数据库名、用户名和密码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意jbpm-4.2的根目录名称不能更改，否则无法运行ANT<br />
&nbsp;&nbsp; (3)修改c:\jbpm-4.2\install\build.xml,修改为&lt;property name="database" value="oracle" /&gt; &lt;!-- {hsqldb | mysql | oracle | postgresql} --&gt;<br />
&nbsp;&nbsp; (4)进入c:\jbpm-4.2\install， 运行 ant create.jbpm.schema,将创建数据库脚本并在指定数据库中创建表<br />
&nbsp;&nbsp; <br />
<span style="font-weight: bold; color: rgb(153,1,2)">4.配置Tomcat</span><br />
&nbsp;&nbsp; (1)复制apache-tomcat-6.0.20.zip文件到c:\jbpm-4.2\install\downloads目录中<br />
&nbsp;&nbsp; (2)进入c:\jbpm-4.2\install，运行ant&nbsp; install.tomcat.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完成后，在c:\jbpm-4.2目录下生成一个tomcat目录<br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">5.配置eclipse</span><br />
&nbsp;&nbsp; (1)复制eclipse-jee-galileo-win32.zip文件到c:\jbpm-4.2\install\downloads目录中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 注意：eclipse的名称必须是eclipse-jee-galileo-win32<br />
&nbsp;&nbsp; (2)进入c:\jbpm-4.2\install，运行ant&nbsp; install.eclipse，运行时间较长<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 完成后，在c:\jbpm-4.2目录下生成一个eclipse目录<br />
&nbsp;&nbsp; 注意：如果没有不用ant配置eclipse，安装下面的GPD时，提示出错，点击确定后，GPD依然可以使用，不知道为什么。<br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">6.配置流程设计器GPD</span><br />
&nbsp;&nbsp;&nbsp; 启动eclipse,在Eclipse里添加更新站点的方法：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 帮助 --&gt; 安装新软件...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 添加...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 添加站点 对话框中，单击 压缩包...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 找到 install/src/gpd/jbpm-gpd-site.zip 并点击 '打开'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 确定 在 添加站点 对话框中，会返回到 '安装'对话框<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择出现的 jPDL 4 GPD 更新站点，全部选中<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 下一步.. 然后点击 完成<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 接受协议<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当它询问的时候重启eclipse<br />
&nbsp;&nbsp; <br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">7.配置elcipse工程</span><br />
&nbsp;&nbsp; 配置jBPM：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 Window --&gt; Preferences<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 选择 JBoss jBPM --&gt; jBPM-4.2 --&gt; Runtime Locations<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 Add...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Add Location 对话框中，输入一个名字，比如&nbsp; jBPM-4.2 然后点击 Search...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Browse For Folder 对话框中，选择你的jbpm-4.2根目录，然后点击 OK<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 点击 OK 在 Add Location 对话框中 <br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">8.定义一个用户库</span><br />
&nbsp; 用户库用来放置jBPM的库文件。 如果你创建一个新工程， 只需要将用户库全部添加到build path<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击窗口 --&gt; 属性（Windows --&gt; Preferences）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 选择Java --&gt; 创建路径 --&gt; 用户类库（Java --&gt; Build Path --&gt; User Libraries）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击新建（New）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型名字jBPM Libraries<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击添加JARs（Add JARs...）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 找到jBPM安装程序下的lib目录<br />
&nbsp;&nbsp;&nbsp;&nbsp; 选择lib下的所有jar文件并点击打开（Open）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 选择jBPM Libraries作为入口<br />
&nbsp;&nbsp;&nbsp;&nbsp; 重新点击添加JARs（Add JARs）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 在jBPM的安装程序的根目录下选择jbpm.jar文件<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击打开（Open）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在jbpm.jar下选择源码附件（Source attachment）作为入口<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击编辑（Edit）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在源码附件的配置（Source Attachment Configuration）对话框中，点击目录（External Folder...）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 找到jBPM安装程序下的src目录<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击选择（Choose）<br />
&nbsp;&nbsp;&nbsp;&nbsp; 点击两次'确定'（Ok）会关闭所有对话框<br />
<br />
<span style="font-weight: bold; color: rgb(153,1,2)">9.创建一个jbpm demo</span><br />
创建一个例子，并将工作流程定义保存到数据库中<br />
(1)创建一个java Project，起名&#8220; myjbpm &#8221;，然后就可以单击&#8220;完成&#8221;了<br />
(2)将c:\jbpm-4.2\examples\src中的所有配置文件复制到myjbpm工程中的根目录下<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbpm.cfg.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbpm.hibernate.cfg.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbpm.mail.properties<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jbpm.mail.templates.examples.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; logging.properties<br />
<br />
(3)修改jbpm.hibernate.cfg.xml<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hibernate.cfg.xml 的默认设置是用 HSQL ，这是一个内存数据库，这种内存数据库用来代替项目实际所用的数据库来做单元测试挺不错的。不过我们这里是要试试用 MySQL 、 Oracle <br />
MySQL 的更改如下：<br />
&nbsp;&nbsp; &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.driver_class"&gt;com.mysql.jdbc.Driver&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.url"&gt;jdbc:mysql://localhost:3306/jbpm&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.username"&gt;root&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.password"&gt;123456&lt;/property&gt;<br />
<br />
Oracle 的更改如下：<br />
&nbsp;&nbsp; &lt;property name="hibernate.dialect"&gt;org.hibernate.dialect.OracleDialect&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.driver_class"&gt;oracle.jdbc.driver.OracleDriver&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.url"&gt;jdbc:oracle:thin:@192.168.123.10:1521:wxxrDB&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.username"&gt;xiong&lt;/property&gt;<br />
&nbsp;&nbsp; &lt;property name="hibernate.connection.password"&gt;xiong&lt;/property&gt;<br />
<br />
(4)定义流程<br />
&nbsp;&nbsp; 创建流程的定义文件是 pd.jpdl.xml，将下面代码复制到文件中<br />
------------------------------------------------------------------------------------------<br />
&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />
<br />
&lt;process name="pd" xmlns="http://jbpm.org/4.0/jpdl"&gt;<br />
&nbsp;&nbsp; &lt;start name="start1" g="207,62,48,48"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="to state1" to="state1" g="-59,-17"/&gt;<br />
&nbsp;&nbsp; &lt;/start&gt;<br />
&nbsp;&nbsp; &lt;end name="end1" g="208,293,48,48"/&gt;<br />
&nbsp;&nbsp; &lt;state name="state1" g="185,155,92,52"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;transition name="to end1" to="end1" g="-47,-17"/&gt;<br />
&nbsp;&nbsp; &lt;/state&gt;<br />
&lt;/process&gt;<br />
------------------------------------------------------------------------------------------<br />
<br />
(5)布置jbpm<br />
<br />
import junit.framework.TestCase;<br />
import org.jbpm.api.Configuration;<br />
import org.jbpm.api.ExecutionService;<br />
import org.jbpm.api.HistoryService;<br />
import org.jbpm.api.ManagementService;<br />
import org.jbpm.api.ProcessEngine;<br />
import org.jbpm.api.RepositoryService;<br />
import org.jbpm.api.TaskService;<br />
<br />
public class ServicesTest extends TestCase {<br />
&nbsp;&nbsp; public void testObtainServicesAndDeployProcess() {<br />
&nbsp;&nbsp;&nbsp;&nbsp; Configuration configuration = new Configuration();<br />
&nbsp;&nbsp;&nbsp;&nbsp; ProcessEngine processEngine = configuration.buildProcessEngine();<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; RepositoryService repositoryService = processEngine.getRepositoryService();<br />
&nbsp;&nbsp;&nbsp;&nbsp; ExecutionService executionService = processEngine.getExecutionService();<br />
&nbsp;&nbsp;&nbsp;&nbsp; TaskService taskService = processEngine.getTaskService();<br />
&nbsp;&nbsp;&nbsp;&nbsp; HistoryService historyService = processEngine.getHistoryService();<br />
&nbsp;&nbsp;&nbsp;&nbsp; ManagementService managementService = processEngine.getManagementService();<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp; // 开始部署一个新的流程文件<br />
&nbsp;&nbsp;&nbsp;&nbsp; String deploymentId = repositoryService.createDeployment().addResourceFromClasspath("pd.jpdl.xml").deploy();<br />
<br />
&nbsp;&nbsp; }<br />
}<br />
<br />
&nbsp;&nbsp; 无论是 MySQL 还是 Oracle ，<br />
&nbsp;&nbsp; jbpm4_deployment表，你会发现多了一条记录<br />
&nbsp;&nbsp; jbpm4_deployprop表会多了三条记录,对应id,key,version<br />
&nbsp;&nbsp; jbpm4_lob 表会多了一条记录,保存流程图<br />
<br />
<br />
参考文献：<br />
1.bestyanghui. JBPM4.1配置实用过程. http://blog.csdn.net/bestyanghui/archive/2009/10/12/4656914.aspx<br />
2.熊熊之家. jbpm4开发步骤. http://hi.baidu.com/freshman0502/blog/item/092bab19ea68a873dab4bd91.html<br /><img src ="http://www.blogjava.net/rain1102/aggbug/304687.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-12-03 19:48 <a href="http://www.blogjava.net/rain1102/archive/2009/12/03/304687.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Extjs－displayfield格式化日期</title><link>http://www.blogjava.net/rain1102/archive/2009/11/30/304320.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Mon, 30 Nov 2009 14:25:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/11/30/304320.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/304320.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/11/30/304320.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/304320.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/304320.html</trackback:ping><description><![CDATA[Ext.override(Ext.form.DisplayField, {<br />
&nbsp;&nbsp;&nbsp; getValue : function(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this.value;<br />
&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp; setValue : function(v){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.value = v;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.setRawValue(this.formatValue(v));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return this;<br />
&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp; formatValue : function(v){<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(this.dateFormat &amp;&amp; Ext.isDate(v)){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;return v.dateFormat(this.dateFormat);<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;if(this.numberFormat &amp;&amp; typeof v == 'number'){<br />
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;return Ext.util.Format.number(v, this.numberFormat);<br />
&nbsp;&nbsp;&nbsp; &nbsp;}<br />
&nbsp;&nbsp;&nbsp; &nbsp;return v;<br />
&nbsp;&nbsp;&nbsp; }<br />
});<br />
<br />
<br />
items:[{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fieldLabel:'申购日期',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xtype : 'displayfield',<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name : 'orderDate',<br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: red">&nbsp;formatValue: function(value){return new Date(value).format("Y-m-d");}<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;}]<img src ="http://www.blogjava.net/rain1102/aggbug/304320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-11-30 22:25 <a href="http://www.blogjava.net/rain1102/archive/2009/11/30/304320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RACI模型(RACI Model) </title><link>http://www.blogjava.net/rain1102/archive/2009/11/25/303654.html</link><dc:creator>Eric.Zhou</dc:creator><author>Eric.Zhou</author><pubDate>Wed, 25 Nov 2009 08:37:00 GMT</pubDate><guid>http://www.blogjava.net/rain1102/archive/2009/11/25/303654.html</guid><wfw:comment>http://www.blogjava.net/rain1102/comments/303654.html</wfw:comment><comments>http://www.blogjava.net/rain1102/archive/2009/11/25/303654.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/rain1102/comments/commentRss/303654.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/rain1102/services/trackbacks/303654.html</trackback:ping><description><![CDATA[<h2>什么是RACI模型? </h2>
<p>　　RACI是一个用以明确组织变革过程中的各个角色及其相关责任的相对直观的模型。变革过程是不可能自发或者自动进行的，必须有人对其进行作用，促使进程发生变化。因而，就很有必要对谁做什么，以及促发什么样的变革进行定义和描述。 </p>
<ul lastcheckbox="null">
    <li>谁负责（R = Responsible），负责执行任务的角色，具体负责操控项目、解决问题。
    <li>谁批准（A = Accountable），对任务负全责的角色，只有经其同意或签署之后，项目才能得以进行。
    <li>咨询谁（C = Consulted），在任务实施前或中提供指定性意见的人员。
    <li>告知谁（I = Informed），及时被通知结果的人员，不必向其咨询、征求意见。 </li>
</ul>
<a name="RACI.E8.A1.A8.E7.9A.84.E5.BB.BA.E7.AB.8B.E6.AD.A5.E9.AA.A4"></a>
<h2>RACI表的建立步骤 </h2>
<p>　　RACI模型通常利用RACI表来帮助讨论、交流各个角色及相关责任。RACI表的建立步骤： </p>
<p>　　1. 辨识整个流程，找出各项活动，将它们记录在RACI表的左侧。 </p>
<p>　　2. 辨识流程、活动中的所有角色，将它们记录在RACI表的上方。 </p>
<p>　　3. 完成RACI表的方格单元： 辨识每一个流程、活动的角色（R、A、C、I）。 </p>
<p>　　4. 每一个流程最好有且只有一个&#8220;R&#8221;角色，这是RACI的一般原则。 当一个流程找不到&#8220;R&#8221;角色时，则出现缺口。 当一个流程有多个&#8220;R&#8221;角色时，则出现交叠。 </p>
<ul lastcheckbox="null">
    <li>解决缺口问题：如果某个流程找不到&#8220;R&#8221;角色，这时对流程负全责的权威人士则应该在现有角色中（或者发现新人选）挑选、任命一人担任&#8220;R&#8221;。更新RACI表，对各个角色及其相关责任进行阐述。
    <li>解决交叠问题：如果不止一个&#8220;R&#8221;存在，那么就要对该流程进行再分解，然而再对&#8220;R&#8221;进行分配。 </li>
</ul>
<p>　　<a class="image" title="RACI模型(RACI Model)" href="http://wiki.mbalib.com/wiki/Image:RACI%E6%A8%A1%E5%9E%8B%E8%A1%A8.jpg"></a></p><img src ="http://www.blogjava.net/rain1102/aggbug/303654.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/rain1102/" target="_blank">Eric.Zhou</a> 2009-11-25 16:37 <a href="http://www.blogjava.net/rain1102/archive/2009/11/25/303654.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>