<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>走向云和山的彼端</title>
	<atom:link href="http://www.qiutian.occm.cn/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.qiutian.occm.cn</link>
	<description>世外悠悠隔人间，不忍萋萋乱世烟</description>
	<lastBuildDate>Sun, 14 Nov 2010 06:08:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>关于思维方式的思考</title>
		<link>http://www.qiutian.occm.cn/2010/11/14/thinkaboutthinking/</link>
		<comments>http://www.qiutian.occm.cn/2010/11/14/thinkaboutthinking/#comments</comments>
		<pubDate>Sun, 14 Nov 2010 06:05:37 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=95</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>我们每个人都是数目众多的群体的一部分，与众多群体相应的是众多细分的人类传统。在每个传统中，某一特定的个体可能会比群体里的其他成员优秀，也可能低劣，或其中之一，或两者兼有，这取决于定义方法和环境因素。</p>
<p>正因为如此，“优秀”和“低劣”没有什么实际意义。客观地讲，真正存在的是“不同”，我们每个人都是不同的，我不同，你不同，还有他、她、他们……</p>
<p>正是这种不同，才是人类的光荣，也才最有可能拯救人类，因为某人不能做的事，别人能做；在某人不能兴旺发达的地方，别人利用广泛的条件却能够兴旺发达。我认为，我们应该从整个人类物种的角度出发，把这些“不同”视为人类的主要财富。千万不要从个人的角度出发，试图用它们把我们的生活搞糟。</p>
<p>艾萨克・阿西莫夫</p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>我们每个人都是数目众多的群体的一部分，与众多群体相应的是众多细分的人类传统。在每个传统中，某一特定的个体可能会比群体里的其他成员优秀，也可能低劣，或其中之一，或两者兼有，这取决于定义方法和环境因素。</p>
<p>正因为如此，“优秀”和“低劣”没有什么实际意义。客观地讲，真正存在的是“不同”，我们每个人都是不同的，我不同，你不同，还有他、她、他们……</p>
<p>正是这种不同，才是人类的光荣，也才最有可能拯救人类，因为某人不能做的事，别人能做；在某人不能兴旺发达的地方，别人利用广泛的条件却能够兴旺发达。我认为，我们应该从整个人类物种的角度出发，把这些“不同”视为人类的主要财富。千万不要从个人的角度出发，试图用它们把我们的生活搞糟。</p></blockquote>
<p>艾萨克・阿西莫夫</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/11/14/thinkaboutthinking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>两个Java MD5实现类，和利用Java MD5生成File checksum。</title>
		<link>http://www.qiutian.occm.cn/2010/09/26/%e4%b8%a4%e4%b8%aajava-md5%e5%ae%9e%e7%8e%b0%e7%b1%bb%ef%bc%8c%e5%92%8c%e5%88%a9%e7%94%a8java-md5%e7%94%9f%e6%88%90file-checksum%e3%80%82/</link>
		<comments>http://www.qiutian.occm.cn/2010/09/26/%e4%b8%a4%e4%b8%aajava-md5%e5%ae%9e%e7%8e%b0%e7%b1%bb%ef%bc%8c%e5%92%8c%e5%88%a9%e7%94%a8java-md5%e7%94%9f%e6%88%90file-checksum%e3%80%82/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 09:35:28 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[网络开发 [Web-based Development]]]></category>
		<category><![CDATA[file checksum]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[md5]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=90</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>第一个：</p>
<p>pass &#8220;String&#8221; return MD5 &#8220;String&#8221;</p>
Source code&#160;&#160;&#160;import java.io.FileInputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
&#160;
public class MD5 &#123;
    public static String getMD5&#40;String input&#41; &#123;
        try &#123;
            MessageDigest md = MessageDigest.getInstance&#40;&#34;MD5&#34;&#41;;
            byte&#91;&#93; messageDigest = md.digest&#40;input.getBytes&#40;&#41;&#41;;
            BigInteger number = new BigInteger&#40;1, messageDigest&#41;;
  [...]]]></description>
			<content:encoded><![CDATA[<p>第一个：</p>
<p>pass &#8220;String&#8221; return MD5 &#8220;String&#8221;</p>
<div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_4"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#codesyntax_4"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_4" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_4" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">java.io.FileInputStream</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.io.UnsupportedEncodingException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.math.BigInteger</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.MessageDigest</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.NoSuchAlgorithmException</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> MD5 <span class="br0">&#123;</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getMD5<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> input<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a> md <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&quot;MD5&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> messageDigest <span class="sy0">=</span> md.<span class="me1">digest</span><span class="br0">&#40;</span>input.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abiginteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BigInteger</span></a> number <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Abiginteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">BigInteger</span></a><span class="br0">&#40;</span>1, messageDigest<span class="br0">&#41;</span><span class="sy0">;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> hashtext <span class="sy0">=</span> number.<span class="me1">toString</span><span class="br0">&#40;</span>16<span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="co1">// Now we need to zero pad it if you actually want the full 32 chars.</span>
            <span class="kw1">while</span> <span class="br0">&#40;</span>hashtext.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&lt;</span> <span class="nu0">32</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                hashtext <span class="sy0">=</span> <span class="st0">&quot;0&quot;</span> <span class="sy0">+</span> hashtext<span class="sy0">;</span>
            <span class="br0">&#125;</span>
            <span class="kw1">return</span> hashtext<span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anosuchalgorithmexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">NoSuchAlgorithmException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw1">throw</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aruntimeexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">RuntimeException</span></a><span class="br0">&#40;</span>e<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anosuchalgorithmexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">NoSuchAlgorithmException</span></a> <span class="br0">&#123;</span>
        <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>getMD5<span class="br0">&#40;</span><span class="st0">&quot;Javarmi.com&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>第二个，同样效果，算法稍有不同：</p>
<div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_5"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#codesyntax_5"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_5" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_5" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">import</span> <span class="co2">java.io.FileInputStream</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.io.UnsupportedEncodingException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.math.BigInteger</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.MessageDigest</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.security.NoSuchAlgorithmException</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">public</span> <span class="kw1">class</span> MD5 <span class="br0">&#123;</span>
    <span class="kw1">public</span> <span class="kw1">static</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> getMD5<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> input<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> source<span class="sy0">;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <span class="co1">//Get byte according by specified coding.</span>
            source <span class="sy0">=</span> input.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="st0">&quot;UTF-8&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aunsupportedencodingexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">UnsupportedEncodingException</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            source <span class="sy0">=</span> input.<span class="me1">getBytes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> result <span class="sy0">=</span> <span class="kw2">null</span><span class="sy0">;</span>
        <span class="kw4">char</span> hexDigits<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="br0">&#123;</span><span class="st0">'0'</span>, <span class="st0">'1'</span>, <span class="st0">'2'</span>, <span class="st0">'3'</span>, <span class="st0">'4'</span>, <span class="st0">'5'</span>, <span class="st0">'6'</span>, <span class="st0">'7'</span>,
                <span class="st0">'8'</span>, <span class="st0">'9'</span>, <span class="st0">'a'</span>, <span class="st0">'b'</span>, <span class="st0">'c'</span>, <span class="st0">'d'</span>, <span class="st0">'e'</span>, <span class="st0">'f'</span><span class="br0">&#125;</span><span class="sy0">;</span>
        <span class="kw1">try</span> <span class="br0">&#123;</span>
            <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a> md <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&quot;MD5&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            md.<span class="me1">update</span><span class="br0">&#40;</span>source<span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="co1">//The result should be one 128 integer</span>
            <span class="kw4">byte</span> temp<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> md.<span class="me1">digest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw4">char</span> str<span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">char</span><span class="br0">&#91;</span>16 <span class="sy0">*</span> 2<span class="br0">&#93;</span><span class="sy0">;</span>
            <span class="kw4">int</span> k <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
            <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> <span class="nu0">16</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                <span class="kw4">byte</span> byte0 <span class="sy0">=</span> temp<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">;</span>
                str<span class="br0">&#91;</span>k<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> hexDigits<span class="br0">&#91;</span>byte0 <span class="sy0">&gt;&gt;&gt;</span> 4 <span class="sy0">&amp;</span> 0xf<span class="br0">&#93;</span><span class="sy0">;</span>
                str<span class="br0">&#91;</span>k<span class="sy0">++</span><span class="br0">&#93;</span> <span class="sy0">=</span> hexDigits<span class="br0">&#91;</span>byte0 <span class="sy0">&amp;</span> 0xf<span class="br0">&#93;</span><span class="sy0">;</span>
            <span class="br0">&#125;</span>
            result <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#40;</span>str<span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span> <span class="kw1">catch</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> e<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            e.<span class="me1">printStackTrace</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        <span class="kw1">return</span> result<span class="sy0">;</span>
    <span class="br0">&#125;</span>
&nbsp;
    <span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anosuchalgorithmexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">NoSuchAlgorithmException</span></a> <span class="br0">&#123;</span>
        <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span>getMD5<span class="br0">&#40;</span><span class="st0">&quot;Javarmi.com&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>最后是一个用MD5生成File checksum的例子:</p>
<div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_6"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#codesyntax_6"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_6" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_6" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">public</span> <span class="kw1">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Exception</span></a> <span class="br0">&#123;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a> md <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amessagedigest+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">MessageDigest</span></a>.<span class="me1">getInstance</span><span class="br0">&#40;</span><span class="st0">&quot;MD5&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afileinputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileInputStream</span></a> fis <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Afileinputstream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileInputStream</span></a><span class="br0">&#40;</span><span class="st0">&quot;c:<span class="es0">\\</span>apache<span class="es0">\\</span>cxf.jar&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> dataBytes <span class="sy0">=</span> <span class="kw1">new</span> <span class="kw4">byte</span><span class="br0">&#91;</span>1024<span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
    <span class="kw4">int</span> nread <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
    <span class="kw1">while</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>nread <span class="sy0">=</span> fis.<span class="me1">read</span><span class="br0">&#40;</span>dataBytes<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">!=</span> <span class="sy0">-</span>1<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        md.<span class="me1">update</span><span class="br0">&#40;</span>dataBytes, 0, nread<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span><span class="sy0">;</span>
    <span class="kw4">byte</span><span class="br0">&#91;</span><span class="br0">&#93;</span> mdbytes <span class="sy0">=</span> md.<span class="me1">digest</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astringbuffer+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">StringBuffer</span></a> sb <span class="sy0">=</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astringbuffer+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">StringBuffer</span></a><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> mdbytes.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
        sb.<span class="me1">append</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#40;</span>mdbytes<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&amp;</span> 0xff<span class="br0">&#41;</span> <span class="sy0">+</span> 0x100, 16<span class="br0">&#41;</span>.<span class="me1">substring</span><span class="br0">&#40;</span>1<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
    <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Asystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><span class="st0">&quot;Digest(in hex format):: &quot;</span> <span class="sy0">+</span> sb.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/09/26/%e4%b8%a4%e4%b8%aajava-md5%e5%ae%9e%e7%8e%b0%e7%b1%bb%ef%bc%8c%e5%92%8c%e5%88%a9%e7%94%a8java-md5%e7%94%9f%e6%88%90file-checksum%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF中与POPUP(弹出）窗口交换数据的两种方式。</title>
		<link>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%8epopup%e5%bc%b9%e5%87%ba%ef%bc%89%e7%aa%97%e5%8f%a3%e4%ba%a4%e6%8d%a2%e6%95%b0%e6%8d%ae%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e3%80%82/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%8epopup%e5%bc%b9%e5%87%ba%ef%bc%89%e7%aa%97%e5%8f%a3%e4%ba%a4%e6%8d%a2%e6%95%b0%e6%8d%ae%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e3%80%82/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 08:27:19 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[网络开发 [Web-based Development]]]></category>
		<category><![CDATA[form submit]]></category>
		<category><![CDATA[java server face]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[popup window]]></category>
		<category><![CDATA[submit]]></category>
		<category><![CDATA[value]]></category>
		<category><![CDATA[variable]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=80</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' -->

	

很多人都知道，用：popup = window.open(url, name, features);
popup.focus();可以弹出一个新的浏览器的窗口，这是一个十分方便常用的功能。但是如何在JSF中与弹出窗口交换数据？是很多人关心的问题。这里基于Core JSF书中的例子，谈到两个方法，列举到这里，希望对有需求的人有所帮助。</p>
<p>第一种方法较为简单，和所有其他的基于网络编程语言一样，使用URL链接来提交你所需要的变量和变量值。比如我们的例子中，使用：</p>
<p></p>
<p>window.open(&#8220;popup.faces?country=&#8221; + country[i].value, &#8220;popup&#8221;, features);</p>
<p>来将ID为country的控件的值提交为一个叫做country的URL变量。然后在JSF中使用“﻿param.country”来获取这个值。</p>
<p>具体例子实现：</p>
<p>popup1.js&#160;&#160;&#160;function doPopup&#40;source&#41; &#123;
   country = source.form&#91;source.form.id + &#34;:country&#34;&#93;;
   for &#40; var i = 0; i &#60; country.length; i++&#41; &#123;
      if &#40;country&#91;i&#93;.checked&#41; &#123;
         popup = window.open&#40;&#34;popup1.xhtml?country=&#34;
            + country&#91;i&#93;.value, &#34;popup&#34;,
         &#34;height=300,width=200,toolbar=no,menubar=no,&#34;
       [...]]]></description>
			<content:encoded><![CDATA[
<a href="http://www.qiutian.occm.cn/wp-content/gallery/temporary1/27-08-2010-6-01-58-pm.png" title="" class="shutterset_singlepic2" >
	<img class="ngg-singlepic ngg-left" src="http://www.qiutian.occm.cn/wp-content/gallery/cache/2__320x240_27-08-2010-6-01-58-pm.png" alt="27-08-2010-6-01-58-pm" title="27-08-2010-6-01-58-pm" />
</a>
很多人都知道，用：popup = window.open(url, name, features);<br />
popup.focus();可以弹出一个新的浏览器的窗口，这是一个十分方便常用的功能。但是如何在JSF中与弹出窗口交换数据？是很多人关心的问题。这里基于Core JSF书中的例子，谈到两个方法，列举到这里，希望对有需求的人有所帮助。</p>
<p>第一种方法较为简单，和所有其他的基于网络编程语言一样，使用URL链接来提交你所需要的变量和变量值。比如我们的例子中，使用：</p>
<p><span id="more-80"></span></p>
<p>window.open(&#8220;popup.faces?country=&#8221; + country[i].value, &#8220;popup&#8221;, features);</p>
<p>来将ID为country的控件的值提交为一个叫做country的URL变量。然后在JSF中使用“﻿param.country”来获取这个值。</p>
<p>具体例子实现：</p>
<p><div id="wpshdo_13" class="wp-synhighlighter-outer"><div id="wpshdt_13" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_13"></a><a id="wpshat_13" class="wp-synhighlighter-title" href="#codesyntax_13"  onClick="javascript:wpsh_toggleBlock(13)" title="Click to show/hide code block">popup1.js</a></td><td align="right"><a href="#codesyntax_13" onClick="javascript:wpsh_code(13)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_13" onClick="javascript:wpsh_print(13)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_13" class="wp-synhighlighter-inner" style="display: block;"><pre class="javascript" style="font-family:monospace;"><span class="kw2">function</span> doPopup<span class="br0">&#40;</span>source<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   country <span class="sy0">=</span> source.<span class="me1">form</span><span class="br0">&#91;</span>source.<span class="me1">form</span>.<span class="me1">id</span> <span class="sy0">+</span> <span class="st0">&quot;:country&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span>
   <span class="kw1">for</span> <span class="br0">&#40;</span> <span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> country.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>country<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">checked</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
         popup <span class="sy0">=</span> window.<span class="kw3">open</span><span class="br0">&#40;</span><span class="st0">&quot;popup1.xhtml?country=&quot;</span>
            <span class="sy0">+</span> country<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">value</span><span class="sy0">,</span> <span class="st0">&quot;popup&quot;</span><span class="sy0">,</span>
         <span class="st0">&quot;height=300,width=200,toolbar=no,menubar=no,&quot;</span>
               <span class="sy0">+</span> <span class="st0">&quot;scrollbars=yes&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         popup.<span class="me1">openerFormId</span> <span class="sy0">=</span> source.<span class="me1">form</span>.<span class="me1">id</span><span class="sy0">;</span>
         popup.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">function</span> doSave<span class="br0">&#40;</span>value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   <span class="kw2">var</span> formId <span class="sy0">=</span> window.<span class="me1">openerFormId</span><span class="sy0">;</span>
   opener.<span class="me1">document</span>.<span class="me1">forms</span><span class="br0">&#91;</span>formId<span class="br0">&#93;</span><span class="br0">&#91;</span>formId <span class="sy0">+</span> <span class="st0">&quot;:state&quot;</span><span class="br0">&#93;</span>.<span class="me1">value</span> <span class="sy0">=</span> value<span class="sy0">;</span>
   window.<span class="kw3">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></p>
<div id="wpshdo_14" class="wp-synhighlighter-outer"><div id="wpshdt_14" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_14"></a><a id="wpshat_14" class="wp-synhighlighter-title" href="#codesyntax_14"  onClick="javascript:wpsh_toggleBlock(14)" title="Click to show/hide code block">technique1.xhtml</a></td><td align="right"><a href="#codesyntax_14" onClick="javascript:wpsh_code(14)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_14" onClick="javascript:wpsh_print(14)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_14" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span class="sc0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="sc3"><span class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></span>
<span class="sc3">      <span class="re0">xmlns:h</span>=<span class="st0">&quot;http://java.sun.com/jsf/html&quot;</span></span>
<span class="sc3">      <span class="re0">xmlns:f</span>=<span class="st0">&quot;http://java.sun.com/jsf/core&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;h:head<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:outputScript</span> <span class="re0">library</span>=<span class="st0">&quot;javascript&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;popup1.js&quot;</span><span class="re2">/&gt;</span></span>
      <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Popup window technique 1<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:head<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;h:body<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:form<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;table<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;tr<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span></span>Country:<span class="sc3"><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:selectOneRadio</span> <span class="re0">id</span>=<span class="st0">&quot;country&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.country}&quot;</span><span class="re2">&gt;</span></span>
                  <span class="sc3"><span class="re1">&lt;f:selectItem</span> <span class="re0">itemLabel</span>=<span class="st0">&quot;USA&quot;</span> <span class="re0">itemValue</span>=<span class="st0">&quot;USA&quot;</span><span class="re2">/&gt;</span></span>
                  <span class="sc3"><span class="re1">&lt;f:selectItem</span> <span class="re0">itemLabel</span>=<span class="st0">&quot;Canada&quot;</span> <span class="re0">itemValue</span>=<span class="st0">&quot;Canada&quot;</span><span class="re2">/&gt;</span></span>
               <span class="sc3"><span class="re1">&lt;/h:selectOneRadio<span class="re2">&gt;</span></span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/tr<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;tr<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span></span>State/Province:<span class="sc3"><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:inputText</span> <span class="re0">id</span>=<span class="st0">&quot;state&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.state}&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:commandButton</span> <span class="re0">value</span>=<span class="st0">&quot;...&quot;</span></span>
<span class="sc3">               <span class="re0">onclick</span>=<span class="st0">&quot;doPopup(this); return false;&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/tr<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/table<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;p<span class="re2">&gt;</span></span><span class="re1">&lt;h:commandButton</span> <span class="re0">value</span>=<span class="st0">&quot;Next&quot;</span> <span class="re0">action</span>=<span class="st0">&quot;index&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/p<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;/h:form<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:body<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></pre></div></div>
<p>这是弹出窗口的内容：</p>
<div id="wpshdo_15" class="wp-synhighlighter-outer"><div id="wpshdt_15" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_15"></a><a id="wpshat_15" class="wp-synhighlighter-title" href="#codesyntax_15"  onClick="javascript:wpsh_toggleBlock(15)" title="Click to show/hide code block">popup1.xhtml</a></td><td align="right"><a href="#codesyntax_15" onClick="javascript:wpsh_code(15)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_15" onClick="javascript:wpsh_print(15)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_15" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span class="sc0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="sc3"><span class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></span>
<span class="sc3">      <span class="re0">xmlns:h</span>=<span class="st0">&quot;http://java.sun.com/jsf/html&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;h:head<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:outputScript</span> <span class="re0">library</span>=<span class="st0">&quot;javascript&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;popup1.js&quot;</span><span class="re2">/&gt;</span></span>
      <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Select a state/province<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:head<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;h:body<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:form<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;h:dataTable</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.states[param.country]}&quot;</span> <span class="re0">var</span>=<span class="st0">&quot;state&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;h:column<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;h:outputLink</span> <span class="re0">value</span>=<span class="st0">&quot;#&quot;</span> <span class="re0">onclick</span>=<span class="st0">&quot;doSave('#{state}');&quot;</span><span class="re2">&gt;</span></span>
                  #{state}
               <span class="sc3"><span class="re1">&lt;/h:outputLink<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/h:column<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/h:dataTable<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;/h:form<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:body<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></pre></div></div>
<p>第二种方法，是使用隐藏的表单，并且使用form的&#8221;target&#8221;属性来将值提交到需要的目标。</p>
<p>&lt;h:form id=&#8221;hidden&#8221; target=&#8221;popup&#8221;&gt;<br />
&lt;h:inputHidden id=&#8221;country&#8221; value=&#8221;#{bb.country}&#8221;/&gt;<br />
&lt;h:commandLink id=&#8221;go&#8221; action=&#8221;showStates&#8221;/&gt;<br />
&lt;/h:form&gt;</p>
<p>需要注意的是：</p>
<ul>
<li>Target=&#8221;&#8216;的目标要指向到具体的弹出窗口，这样浏览器才会将你所需要的值提交给你所需要的页面。</li>
<li>bb.country的值，由bb bean来维护</li>
<li>commandlink的action=&#8221;"部分的输出可以用来给JSF navigation<br />
handler做各种判断</li>
</ul>
<p>JS中使用以下方式来获取这个隐藏表单所提交的值：</p>
<p>document.getElementById(&#8220;hidden:country&#8221;).value = country[i].value;<br />
document.getElementById(&#8220;hidden:go&#8221;).onclick(null);</p>
<p>具体实现如下：</p>
<div id="wpshdo_16" class="wp-synhighlighter-outer"><div id="wpshdt_16" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_16"></a><a id="wpshat_16" class="wp-synhighlighter-title" href="#codesyntax_16"  onClick="javascript:wpsh_toggleBlock(16)" title="Click to show/hide code block">technique2.xhtml</a></td><td align="right"><a href="#codesyntax_16" onClick="javascript:wpsh_code(16)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_16" onClick="javascript:wpsh_print(16)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_16" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span class="sc0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="sc3"><span class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></span>
<span class="sc3">      <span class="re0">xmlns:h</span>=<span class="st0">&quot;http://java.sun.com/jsf/html&quot;</span> <span class="re0">xmlns:f</span>=<span class="st0">&quot;http://java.sun.com/jsf/core&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;h:head<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:outputScript</span> <span class="re0">library</span>=<span class="st0">&quot;javascript&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;popup1.js&quot;</span><span class="re2">/&gt;</span></span>
      <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Popup window technique 2<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:head<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;h:body<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:form<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;table<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;tr<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span></span>Country:<span class="sc3"><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:selectOneRadio</span> <span class="re0">id</span>=<span class="st0">&quot;country&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.country}&quot;</span><span class="re2">&gt;</span></span>
                  <span class="sc3"><span class="re1">&lt;f:selectItem</span> <span class="re0">itemLabel</span>=<span class="st0">&quot;USA&quot;</span> <span class="re0">itemValue</span>=<span class="st0">&quot;USA&quot;</span><span class="re2">/&gt;</span></span>
                  <span class="sc3"><span class="re1">&lt;f:selectItem</span> <span class="re0">itemLabel</span>=<span class="st0">&quot;Canada&quot;</span> <span class="re0">itemValue</span>=<span class="st0">&quot;Canada&quot;</span><span class="re2">/&gt;</span></span>
               <span class="sc3"><span class="re1">&lt;/h:selectOneRadio<span class="re2">&gt;</span></span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/tr<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;tr<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span></span>State/Province:<span class="sc3"><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:inputText</span> <span class="re0">id</span>=<span class="st0">&quot;state&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.state}&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;td<span class="re2">&gt;</span></span><span class="re1">&lt;h:commandButton</span> <span class="re0">value</span>=<span class="st0">&quot;...&quot;</span></span>
<span class="sc3">               <span class="re0">onclick</span>=<span class="st0">&quot;doPopup(this); return false;&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/td<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/tr<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/table<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;p<span class="re2">&gt;</span></span><span class="re1">&lt;h:commandButton</span> <span class="re0">value</span>=<span class="st0">&quot;Next&quot;</span> <span class="re0">action</span>=<span class="st0">&quot;index&quot;</span><span class="re2">/&gt;</span><span class="re1">&lt;/p<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;/h:form<span class="re2">&gt;</span></span></span>
&nbsp;
      <span class="sc-1">&lt;!-- This hidden form sends a request to a popup window. --&gt;</span>
      <span class="sc3"><span class="re1">&lt;h:form</span> <span class="re0">id</span>=<span class="st0">&quot;hidden&quot;</span> <span class="re0">target</span>=<span class="st0">&quot;popup&quot;</span><span class="re2">&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;h:inputHidden</span> <span class="re0">id</span>=<span class="st0">&quot;country&quot;</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.country}&quot;</span><span class="re2">/&gt;</span></span>
         <span class="sc3"><span class="re1">&lt;h:commandLink</span> <span class="re0">id</span>=<span class="st0">&quot;go&quot;</span> <span class="re0">action</span>=<span class="st0">&quot;popup2&quot;</span><span class="re2">/&gt;</span></span>
      <span class="sc3"><span class="re1">&lt;/h:form<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:body<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></pre></div></div>
<div id="wpshdo_17" class="wp-synhighlighter-outer"><div id="wpshdt_17" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_17"></a><a id="wpshat_17" class="wp-synhighlighter-title" href="#codesyntax_17"  onClick="javascript:wpsh_toggleBlock(17)" title="Click to show/hide code block">popup2.xhtml</a></td><td align="right"><a href="#codesyntax_17" onClick="javascript:wpsh_code(17)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_17" onClick="javascript:wpsh_print(17)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_17" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span class="sc0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="sc3"><span class="re1">&lt;html</span> <span class="re0">xmlns</span>=<span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></span>
<span class="sc3">      <span class="re0">xmlns:h</span>=<span class="st0">&quot;http://java.sun.com/jsf/html&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;h:head<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:outputScript</span> <span class="re0">library</span>=<span class="st0">&quot;javascript&quot;</span> <span class="re0">name</span>=<span class="st0">&quot;popup1.js&quot;</span><span class="re2">/&gt;</span></span>
      <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Select a state/province<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:head<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;h:body<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;h:form<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;h:dataTable</span> <span class="re0">value</span>=<span class="st0">&quot;#{bb.statesForCountry}&quot;</span> <span class="re0">var</span>=<span class="st0">&quot;state&quot;</span><span class="re2">&gt;</span></span>
            <span class="sc3"><span class="re1">&lt;h:column<span class="re2">&gt;</span></span></span>
               <span class="sc3"><span class="re1">&lt;h:outputLink</span> <span class="re0">value</span>=<span class="st0">&quot;#&quot;</span> <span class="re0">onclick</span>=<span class="st0">&quot;doSave('#{state}');&quot;</span><span class="re2">&gt;</span></span>
                  #{state}
               <span class="sc3"><span class="re1">&lt;/h:outputLink<span class="re2">&gt;</span></span></span>
            <span class="sc3"><span class="re1">&lt;/h:column<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;/h:dataTable<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;/h:form<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/h:body<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/html<span class="re2">&gt;</span></span></span></pre></div></div>
<div id="wpshdo_18" class="wp-synhighlighter-outer"><div id="wpshdt_18" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_18"></a><a id="wpshat_18" class="wp-synhighlighter-title" href="#codesyntax_18"  onClick="javascript:wpsh_toggleBlock(18)" title="Click to show/hide code block">popup2.js</a></td><td align="right"><a href="#codesyntax_18" onClick="javascript:wpsh_code(18)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_18" onClick="javascript:wpsh_print(18)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_18" class="wp-synhighlighter-inner" style="display: block;"><pre class="javascript" style="font-family:monospace;"><span class="kw2">function</span> doPopup<span class="br0">&#40;</span>source<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   country <span class="sy0">=</span> source.<span class="me1">form</span><span class="br0">&#91;</span>source.<span class="me1">form</span>.<span class="me1">id</span> <span class="sy0">+</span> <span class="st0">&quot;:country&quot;</span><span class="br0">&#93;</span><span class="sy0">;</span>
   <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> i <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> country.<span class="me1">length</span><span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>country<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">checked</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      popup <span class="sy0">=</span> window.<span class="kw3">open</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="sy0">,</span> <span class="st0">&quot;/faces/popup2.xhtml&quot;</span><span class="sy0">,</span>
         <span class="st0">&quot;height=300,width=200,toolbar=no,menubar=no,scrollbars=yes&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         popup.<span class="me1">openerFormId</span> <span class="sy0">=</span> source.<span class="me1">form</span>.<span class="me1">id</span><span class="sy0">;</span>
         popup.<span class="kw3">focus</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;hidden:country&quot;</span><span class="br0">&#41;</span>.<span class="me1">value</span> <span class="sy0">=</span> country<span class="br0">&#91;</span>i<span class="br0">&#93;</span>.<span class="me1">value</span><span class="sy0">;</span>
         document.<span class="me1">getElementById</span><span class="br0">&#40;</span><span class="st0">&quot;hidden:go&quot;</span><span class="br0">&#41;</span>.<span class="me1">onclick</span><span class="br0">&#40;</span><span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw2">function</span> doSave<span class="br0">&#40;</span>value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   <span class="kw2">var</span> formId <span class="sy0">=</span> window.<span class="me1">openerFormId</span><span class="sy0">;</span>
   opener.<span class="me1">document</span>.<span class="me1">forms</span><span class="br0">&#91;</span>formId<span class="br0">&#93;</span><span class="br0">&#91;</span>formId <span class="sy0">+</span> <span class="st0">&quot;:state&quot;</span><span class="br0">&#93;</span>.<span class="me1">value</span> <span class="sy0">=</span> value<span class="sy0">;</span>
   window.<span class="kw3">close</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%8epopup%e5%bc%b9%e5%87%ba%ef%bc%89%e7%aa%97%e5%8f%a3%e4%ba%a4%e6%8d%a2%e6%95%b0%e6%8d%ae%e7%9a%84%e4%b8%a4%e7%a7%8d%e6%96%b9%e5%bc%8f%e3%80%82/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSF中为DataTable增加翻页功能</title>
		<link>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%badatatable%e5%a2%9e%e5%8a%a0%e7%bf%bb%e9%a1%b5%e5%8a%9f%e8%83%bd/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%badatatable%e5%a2%9e%e5%8a%a0%e7%bf%bb%e9%a1%b5%e5%8a%9f%e8%83%bd/#comments</comments>
		<pubDate>Fri, 27 Aug 2010 03:26:44 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[网络开发 [Web-based Development]]]></category>
		<category><![CDATA[翻页]]></category>
		<category><![CDATA[datatable]]></category>
		<category><![CDATA[java server face]]></category>
		<category><![CDATA[jsf]]></category>
		<category><![CDATA[page]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[paging]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=70</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>初学JSF的大概都会遇到这么个问题，从Bean中将数据读取出来以后，用DataTable在页面上显示。是很常用的数据内容输出的方法，但是DataTable本身没有翻页的功能。如何给DataTable增加翻页呢？这里分享一下CoreJSF 3rd Edition中的pager demo来完成这个数据分页。其思路可以扩展到各种大量数据需要翻页的情况。</p>
<p>不想自己实现这个翻页的朋友，可以使用各种UI Framework中自带的翻页组件。比如Apache Tomahawk 中的 dataScroller 具体实现方法其实和这里要谈到的类似。</p>
<p>OK首先是JSF网页部分：</p>
index.xhtml&#160;&#160;&#160;&#60;?xml version=&#34;1.0&#34; encoding=&#34;UTF-8&#34;?&#62;
&#60;!DOCTYPE html PUBLIC &#34;-//W3C//DTD XHTML 1.0 Transitional//EN&#34;
&#34;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&#34;&#62;
&#60;html xmlns=&#34;http://www.w3.org/1999/xhtml&#34;
      xmlns:h=&#34;http://java.sun.com/jsf/html&#34;
      xmlns:ui=&#34;http://java.sun.com/jsf/facelets&#34;
      xmlns:corejsf=&#34;http://corejsf.com&#34;&#62;
   &#60;h:head&#62;
      &#60;h:outputStylesheet library=&#34;css&#34; name=&#34;styles.css&#34;/&#62;
      &#60;title&#62;Pager Test&#60;/title&#62;
   &#60;/h:head&#62;
   &#60;h:body&#62;
      &#60;ui:debug/&#62;
      &#60;h:form&#62;
         [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.qiutian.occm.cn/wp-content/uploads/2010/08/27-08-2010-12-58-35-PM.png"><img class="alignleft size-medium wp-image-71" title="27-08-2010 12-58-35 PM" src="http://www.qiutian.occm.cn/wp-content/uploads/2010/08/27-08-2010-12-58-35-PM-300x220.png" alt="" width="300" height="220" /></a>初学JSF的大概都会遇到这么个问题，从Bean中将数据读取出来以后，用DataTable在页面上显示。是很常用的数据内容输出的方法，但是DataTable本身没有翻页的功能。如何给DataTable增加翻页呢？这里分享一下CoreJSF 3rd Edition中的pager demo来完成这个数据分页。其思路可以扩展到各种大量数据需要翻页的情况。</p>
<p>不想自己实现这个翻页的朋友，可以使用各种UI Framework中自带的翻页组件。比如Apache Tomahawk 中的 dataScroller 具体实现方法其实和这里要谈到的类似。</p>
<p><span id="more-70"></span>OK首先是JSF网页部分：</p>
<div id="wpshdo_24" class="wp-synhighlighter-outer"><div id="wpshdt_24" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_24"></a><a id="wpshat_24" class="wp-synhighlighter-title" href="#codesyntax_24"  onClick="javascript:wpsh_toggleBlock(24)" title="Click to show/hide code block">index.xhtml</a></td><td align="right"><a href="#codesyntax_24" onClick="javascript:wpsh_code(24)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_24" onClick="javascript:wpsh_print(24)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_24" class="wp-synhighlighter-inner" style="display: block;"><pre class="html4strict" style="font-family:monospace;"><span class="sc2">&lt;?xml <span class="kw3">version</span><span class="sy0">=</span><span class="st0">&quot;1.0&quot;</span> encoding<span class="sy0">=</span><span class="st0">&quot;UTF-8&quot;</span>?&gt;</span>
<span class="sc0">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;</span>
<span class="sc0">&quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;</span>
<span class="sc2">&lt;<a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a> xmlns<span class="sy0">=</span><span class="st0">&quot;http://www.w3.org/1999/xhtml&quot;</span></span>
<span class="sc2">      xmlns:h<span class="sy0">=</span><span class="st0">&quot;http://java.sun.com/jsf/html&quot;</span></span>
<span class="sc2">      xmlns:ui<span class="sy0">=</span><span class="st0">&quot;http://java.sun.com/jsf/facelets&quot;</span></span>
<span class="sc2">      xmlns:corejsf<span class="sy0">=</span><span class="st0">&quot;http://corejsf.com&quot;</span>&gt;</span>
   <span class="sc2">&lt;h:head&gt;</span>
      <span class="sc2">&lt;h:outputStylesheet library<span class="sy0">=</span><span class="st0">&quot;css&quot;</span> <span class="kw3">name</span><span class="sy0">=</span><span class="st0">&quot;styles.css&quot;</span><span class="sy0">/</span>&gt;</span>
      <span class="sc2">&lt;<a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>Pager Test<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/title.html"><span class="kw2">title</span></a>&gt;</span>
   <span class="sc2">&lt;<span class="sy0">/</span>h:head&gt;</span>
   <span class="sc2">&lt;h:body&gt;</span>
      <span class="sc2">&lt;ui:debug<span class="sy0">/</span>&gt;</span>
      <span class="sc2">&lt;h:form&gt;</span>
         <span class="sc2">&lt;h:dataTable <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;timezones&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;#{tz.data}&quot;</span> var<span class="sy0">=</span><span class="st0">&quot;row&quot;</span> <span class="kw3">rows</span><span class="sy0">=</span><span class="st0">&quot;10&quot;</span>&gt;</span>
            <span class="sc2">&lt;h:column&gt;</span>#{row}<span class="sc2">&lt;<span class="sy0">/</span>h:column&gt;</span>
         <span class="sc2">&lt;<span class="sy0">/</span>h:dataTable&gt;</span>
         <span class="sc2">&lt;corejsf:pager dataTableId<span class="sy0">=</span><span class="st0">&quot;timezones&quot;</span> showpages<span class="sy0">=</span><span class="st0">&quot;20&quot;</span></span>
<span class="sc2">                        selectedStyleClass<span class="sy0">=</span><span class="st0">&quot;currentPage&quot;</span><span class="sy0">/</span>&gt;</span>
      <span class="sc2">&lt;<span class="sy0">/</span>h:form&gt;</span>
   <span class="sc2">&lt;<span class="sy0">/</span>h:body&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><a href="http://december.com/html/4/element/html.html"><span class="kw2">html</span></a>&gt;</span></pre></div></div>
<p>tz这个bean的data是个String[]，其中放了所有的timezone的名称。这里用DataTable将它输出到html页面上。这个表格将会很长，所以我们需要来将其分页化。</p>
<p>TimeZone bean的内容很简单：</p>
<div id="wpshdo_25" class="wp-synhighlighter-outer"><div id="wpshdt_25" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_25"></a><a id="wpshat_25" class="wp-synhighlighter-title" href="#codesyntax_25"  onClick="javascript:wpsh_toggleBlock(25)" title="Click to show/hide code block">TimeZoneBean.java</a></td><td align="right"><a href="#codesyntax_25" onClick="javascript:wpsh_code(25)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_25" onClick="javascript:wpsh_print(25)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_25" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">package</span> <span class="co2">com.corejsf</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">import</span> <span class="co2">javax.faces.bean.ManagedBean</span><span class="sy0">;</span>
   <span class="co1">// or import javax.inject.Named;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.bean.RequestScoped</span><span class="sy0">;</span>
&nbsp;
@ManagedBean<span class="br0">&#40;</span>name<span class="sy0">=</span><span class="st0">&quot;tz&quot;</span><span class="br0">&#41;</span> <span class="co1">// or @Named(&quot;tz&quot;)</span>
@RequestScoped
<span class="kw1">public</span> <span class="kw1">class</span> TimeZoneBean <span class="br0">&#123;</span>
   <span class="kw1">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> data <span class="sy0">=</span> java.<span class="me1">util</span>.<a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Atimezone+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">TimeZone</span></a>.<span class="me1">getAvailableIDs</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="kw1">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> getData<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="kw1">return</span> data<span class="sy0">;</span> <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>好直到这里都没什么，如果你已经留意前面第一个jsf页面，其中的﻿&lt;corejsf:pager dataTableId=&#8221;timezones&#8221; showpages=&#8221;20&#8243;<br />
selectedStyleClass=&#8221;currentPage&#8221;/&gt;部分，实际就是我们这里的重点了，这是一个定制的Renderer，用这个定制的renderer来控制翻页并且切换DataTable的数据显示。</p>
<p>这里我们的这个翻页Renderer叫“com.corejsf.Pager”该类属于javax.faces.Command。</p>
<p>具体实现方式：</p>
<div id="wpshdo_26" class="wp-synhighlighter-outer"><div id="wpshdt_26" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_26"></a><a id="wpshat_26" class="wp-synhighlighter-title" href="#codesyntax_26"  onClick="javascript:wpsh_toggleBlock(26)" title="Click to show/hide code block">PageRenderer.java</a></td><td align="right"><a href="#codesyntax_26" onClick="javascript:wpsh_code(26)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_26" onClick="javascript:wpsh_print(26)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_26" class="wp-synhighlighter-inner" style="display: block;"><pre class="java" style="font-family:monospace;"><span class="kw1">package</span> <span class="co2">com.corejsf</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">import</span> <span class="co2">java.io.IOException</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">java.util.Map</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.component.UIComponent</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.component.UIData</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.component.UIForm</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.context.FacesContext</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.context.ResponseWriter</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.render.FacesRenderer</span><span class="sy0">;</span>
<span class="kw1">import</span> <span class="co2">javax.faces.render.Renderer</span><span class="sy0">;</span>
&nbsp;
@FacesRenderer<span class="br0">&#40;</span>componentFamily<span class="sy0">=</span><span class="st0">&quot;javax.faces.Command&quot;</span>,
   rendererType<span class="sy0">=</span><span class="st0">&quot;com.corejsf.Pager&quot;</span><span class="br0">&#41;</span>
<span class="kw1">public</span> <span class="kw1">class</span> PagerRenderer <span class="kw1">extends</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Arenderer+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Renderer</span></a> <span class="br0">&#123;</span>
   <span class="kw1">public</span> <span class="kw4">void</span> encodeBegin<span class="br0">&#40;</span>FacesContext context, UIComponent component<span class="br0">&#41;</span>
      <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> <span class="br0">&#123;</span>
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id <span class="sy0">=</span> component.<span class="me1">getClientId</span><span class="br0">&#40;</span>context<span class="br0">&#41;</span><span class="sy0">;</span>
      UIComponent parent <span class="sy0">=</span> component<span class="sy0">;</span>
      <span class="kw1">while</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="br0">&#40;</span>parent <span class="kw1">instanceof</span> UIForm<span class="br0">&#41;</span><span class="br0">&#41;</span> parent <span class="sy0">=</span> parent.<span class="me1">getParent</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> formId <span class="sy0">=</span> parent.<span class="me1">getClientId</span><span class="br0">&#40;</span>context<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      ResponseWriter writer <span class="sy0">=</span> context.<span class="me1">getResponseWriter</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>    
&nbsp;
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> styleClass <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;styleClass&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> selectedStyleClass
         <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;selectedStyleClass&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> dataTableId <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;dataTableId&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> showpages <span class="sy0">=</span> toInt<span class="br0">&#40;</span>component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;showpages&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>      
&nbsp;
      <span class="co1">// find the component with the given ID</span>
&nbsp;
      UIData data <span class="sy0">=</span> <span class="br0">&#40;</span>UIData<span class="br0">&#41;</span> component.<span class="me1">findComponent</span><span class="br0">&#40;</span>dataTableId<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw4">int</span> first <span class="sy0">=</span> data.<span class="me1">getFirst</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> itemcount <span class="sy0">=</span> data.<span class="me1">getRowCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> pagesize <span class="sy0">=</span> data.<span class="me1">getRows</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>pagesize <span class="sy0">&lt;=</span> 0<span class="br0">&#41;</span> pagesize <span class="sy0">=</span> itemcount<span class="sy0">;</span>
&nbsp;
      <span class="kw4">int</span> pages <span class="sy0">=</span> itemcount <span class="sy0">/</span> pagesize<span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>itemcount <span class="sy0">%</span> pagesize <span class="sy0">!=</span> 0<span class="br0">&#41;</span> pages<span class="sy0">++;</span>
&nbsp;
      <span class="kw4">int</span> currentPage <span class="sy0">=</span> first <span class="sy0">/</span> pagesize<span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>first <span class="sy0">&gt;=</span> itemcount <span class="sy0">-</span> pagesize<span class="br0">&#41;</span> currentPage <span class="sy0">=</span> pages <span class="sy0">-</span> <span class="nu0">1</span><span class="sy0">;</span>
      <span class="kw4">int</span> startPage <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
      <span class="kw4">int</span> endPage <span class="sy0">=</span> pages<span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>showpages <span class="sy0">&gt;</span> 0<span class="br0">&#41;</span> <span class="br0">&#123;</span>
         startPage <span class="sy0">=</span> <span class="br0">&#40;</span>currentPage <span class="sy0">/</span> showpages<span class="br0">&#41;</span> <span class="sy0">*</span> showpages<span class="sy0">;</span>
         endPage <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Amath+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Math</span></a>.<span class="me1">min</span><span class="br0">&#40;</span>startPage <span class="sy0">+</span> showpages, pages<span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>currentPage <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span>
         writeLink<span class="br0">&#40;</span>writer, component, formId, id, <span class="st0">&quot;&lt;&quot;</span>, styleClass<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw1">if</span> <span class="br0">&#40;</span>startPage <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span>
         writeLink<span class="br0">&#40;</span>writer, component, formId, id, <span class="st0">&quot;&lt;&lt;&quot;</span>, styleClass<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i <span class="sy0">=</span> startPage<span class="sy0">;</span> i <span class="sy0">&lt;</span> endPage<span class="sy0">;</span> i<span class="sy0">++</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
         writeLink<span class="br0">&#40;</span>writer, component, formId, id, <span class="st0">&quot;&quot;</span> <span class="sy0">+</span> <span class="br0">&#40;</span>i <span class="sy0">+</span> 1<span class="br0">&#41;</span>,
            i <span class="sy0">==</span> currentPage <span class="sy0">?</span> selectedStyleClass <span class="sy0">:</span> styleClass<span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
&nbsp;
      <span class="kw1">if</span> <span class="br0">&#40;</span>endPage <span class="sy0">&lt;</span> pages<span class="br0">&#41;</span>
         writeLink<span class="br0">&#40;</span>writer, component, formId, id, <span class="st0">&quot;&gt;&gt;&quot;</span>, styleClass<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw1">if</span> <span class="br0">&#40;</span>first <span class="sy0">&lt;</span> itemcount <span class="sy0">-</span> pagesize<span class="br0">&#41;</span>
         writeLink<span class="br0">&#40;</span>writer, component, formId, id, <span class="st0">&quot;&gt;&quot;</span>, styleClass<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="co1">// hidden field to hold result</span>
      writeHiddenField<span class="br0">&#40;</span>writer, component, id<span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw1">private</span> <span class="kw4">void</span> writeLink<span class="br0">&#40;</span>ResponseWriter writer, UIComponent component,
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> formId, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> styleClass<span class="br0">&#41;</span>
      <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> <span class="br0">&#123;</span>
      writer.<span class="me1">writeText</span><span class="br0">&#40;</span><span class="st0">&quot; &quot;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">startElement</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span>, component<span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">writeAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;href&quot;</span>, <span class="st0">&quot;#&quot;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">writeAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;onclick&quot;</span>, onclickCode<span class="br0">&#40;</span>formId, id, value<span class="br0">&#41;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>styleClass <span class="sy0">!=</span> <span class="kw2">null</span><span class="br0">&#41;</span>
         writer.<span class="me1">writeAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;class&quot;</span>, styleClass, <span class="st0">&quot;styleClass&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">writeText</span><span class="br0">&#40;</span>value, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">endElement</span><span class="br0">&#40;</span><span class="st0">&quot;a&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw1">private</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> onclickCode<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> formId, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id, <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">return</span> <span class="kw1">new</span> StringBuilder<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;document.forms['&quot;</span><span class="br0">&#41;</span>
         .<span class="me1">append</span><span class="br0">&#40;</span>formId<span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;']['&quot;</span><span class="br0">&#41;</span>
         .<span class="me1">append</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;'].value='&quot;</span><span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span>value<span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;'; document.forms['&quot;</span><span class="br0">&#41;</span>
         .<span class="me1">append</span><span class="br0">&#40;</span>formId<span class="br0">&#41;</span>.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;'].submit(); return false;&quot;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw1">private</span> <span class="kw4">void</span> writeHiddenField<span class="br0">&#40;</span>ResponseWriter writer, UIComponent component,
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id<span class="br0">&#41;</span> <span class="kw1">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aioexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> <span class="br0">&#123;</span>
      writer.<span class="me1">startElement</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span>, component<span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">writeAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;type&quot;</span>, <span class="st0">&quot;hidden&quot;</span>, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">writeAttribute</span><span class="br0">&#40;</span><span class="st0">&quot;name&quot;</span>, id, <span class="kw2">null</span><span class="br0">&#41;</span><span class="sy0">;</span>
      writer.<span class="me1">endElement</span><span class="br0">&#40;</span><span class="st0">&quot;input&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw1">public</span> <span class="kw4">void</span> decode<span class="br0">&#40;</span>FacesContext context, UIComponent component<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> id <span class="sy0">=</span> component.<span class="me1">getClientId</span><span class="br0">&#40;</span>context<span class="br0">&#41;</span><span class="sy0">;</span>
      Map<span class="sy0">&lt;</span>String, String<span class="sy0">&gt;</span> parameters
         <span class="sy0">=</span> context.<span class="me1">getExternalContext</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getRequestParameterMap</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> response <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> parameters.<span class="me1">get</span><span class="br0">&#40;</span>id<span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>response <span class="sy0">==</span> <span class="kw2">null</span> <span class="sy0">||</span> response.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span><span class="sy0">;</span> 
&nbsp;
      <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a> dataTableId <span class="sy0">=</span> <span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;dataTableId&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> showpages <span class="sy0">=</span> toInt<span class="br0">&#40;</span>component.<span class="me1">getAttributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&quot;showpages&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>      
&nbsp;
      UIData data <span class="sy0">=</span> <span class="br0">&#40;</span>UIData<span class="br0">&#41;</span> component.<span class="me1">findComponent</span><span class="br0">&#40;</span>dataTableId<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
      <span class="kw4">int</span> first <span class="sy0">=</span> data.<span class="me1">getFirst</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> itemcount <span class="sy0">=</span> data.<span class="me1">getRowCount</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw4">int</span> pagesize <span class="sy0">=</span> data.<span class="me1">getRows</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>pagesize <span class="sy0">&lt;=</span> 0<span class="br0">&#41;</span> pagesize <span class="sy0">=</span> itemcount<span class="sy0">;</span>
&nbsp;
      <span class="kw1">if</span> <span class="br0">&#40;</span>response.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> first <span class="sy0">-=</span> pagesize<span class="sy0">;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>response.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&gt;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> first <span class="sy0">+=</span> pagesize<span class="sy0">;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>response.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;&lt;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> first <span class="sy0">-=</span> pagesize <span class="sy0">*</span> showpages<span class="sy0">;</span>
      <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>response.<span class="me1">equals</span><span class="br0">&#40;</span><span class="st0">&quot;&gt;&gt;&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> first <span class="sy0">+=</span> pagesize <span class="sy0">*</span> showpages<span class="sy0">;</span>
      <span class="kw1">else</span> <span class="br0">&#123;</span>
         <span class="kw4">int</span> page <span class="sy0">=</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">parseInt</span><span class="br0">&#40;</span>response<span class="br0">&#41;</span><span class="sy0">;</span>
         first <span class="sy0">=</span> <span class="br0">&#40;</span>page <span class="sy0">-</span> 1<span class="br0">&#41;</span> <span class="sy0">*</span> pagesize<span class="sy0">;</span>
      <span class="br0">&#125;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>first <span class="sy0">+</span> pagesize <span class="sy0">&gt;</span> itemcount<span class="br0">&#41;</span> first <span class="sy0">=</span> itemcount <span class="sy0">-</span> pagesize<span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>first <span class="sy0">&lt;</span> 0<span class="br0">&#41;</span> first <span class="sy0">=</span> <span class="nu0">0</span><span class="sy0">;</span>
      data.<span class="me1">setFirst</span><span class="br0">&#40;</span>first<span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw1">private</span> <span class="kw1">static</span> <span class="kw4">int</span> toInt<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aobject+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Object</span></a> value<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>value <span class="sy0">==</span> <span class="kw2">null</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="nu0">0</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>value <span class="kw1">instanceof</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anumber+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Number</span></a><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Anumber+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Number</span></a><span class="br0">&#41;</span> value<span class="br0">&#41;</span>.<span class="me1">intValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>value <span class="kw1">instanceof</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> <span class="kw1">return</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Ainteger+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">Integer</span></a>.<span class="me1">parseInt</span><span class="br0">&#40;</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Astring+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#41;</span> value<span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">throw</span> <span class="kw1">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3Aillegalargumentexception+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IllegalArgumentException</span></a><span class="br0">&#40;</span><span class="st0">&quot;Cannot convert &quot;</span> <span class="sy0">+</span> value<span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>配置方面还需要：</p>
<div id="wpshdo_27" class="wp-synhighlighter-outer"><div id="wpshdt_27" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_27"></a><a id="wpshat_27" class="wp-synhighlighter-title" href="#codesyntax_27"  onClick="javascript:wpsh_toggleBlock(27)" title="Click to show/hide code block">web.xml</a></td><td align="right"><a href="#codesyntax_27" onClick="javascript:wpsh_code(27)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_27" onClick="javascript:wpsh_print(27)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_27" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;web-app</span> <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span class="sc3">   <span class="re0">xmlns</span>=<span class="st0">&quot;http://java.sun.com/xml/ns/javaee&quot;</span></span>
<span class="sc3">   <span class="re0">xmlns:web</span>=<span class="st0">&quot;http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span></span>
<span class="sc3">   <span class="re0">xsi:schemaLocation</span>=<span class="st0">&quot;http://java.sun.com/xml/ns/javaee</span>
<span class="sc3">      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&quot;</span></span>
<span class="sc3">   <span class="re0">version</span>=<span class="st0">&quot;2.5&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;servlet<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;servlet-name<span class="re2">&gt;</span></span></span>Faces Servlet<span class="sc3"><span class="re1">&lt;/servlet-name<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;servlet-class<span class="re2">&gt;</span></span></span>javax.faces.webapp.FacesServlet<span class="sc3"><span class="re1">&lt;/servlet-class<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/servlet<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;servlet-mapping<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;servlet-name<span class="re2">&gt;</span></span></span>Faces Servlet<span class="sc3"><span class="re1">&lt;/servlet-name<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;url-pattern<span class="re2">&gt;</span></span></span>/faces/*<span class="sc3"><span class="re1">&lt;/url-pattern<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/servlet-mapping<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;welcome-file-list<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;welcome-file<span class="re2">&gt;</span></span></span>faces/index.xhtml<span class="sc3"><span class="re1">&lt;/welcome-file<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/welcome-file-list<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;context-param<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;param-name<span class="re2">&gt;</span></span></span>javax.faces.PROJECT_STAGE<span class="sc3"><span class="re1">&lt;/param-name<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;param-value<span class="re2">&gt;</span></span></span>Development<span class="sc3"><span class="re1">&lt;/param-value<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/context-param<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;context-param<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;param-name<span class="re2">&gt;</span></span></span>javax.faces.FACELETS_LIBRARIES<span class="sc3"><span class="re1">&lt;/param-name<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;param-value<span class="re2">&gt;</span></span></span>/WEB-INF/corejsf.taglib.xml<span class="sc3"><span class="re1">&lt;/param-value<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/context-param<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/web-app<span class="re2">&gt;</span></span></span></pre></div></div>
<div id="wpshdo_28" class="wp-synhighlighter-outer"><div id="wpshdt_28" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_28"></a><a id="wpshat_28" class="wp-synhighlighter-title" href="#codesyntax_28"  onClick="javascript:wpsh_toggleBlock(28)" title="Click to show/hide code block">corejsf.taglib.xml</a></td><td align="right"><a href="#codesyntax_28" onClick="javascript:wpsh_code(28)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_28" onClick="javascript:wpsh_print(28)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_28" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;facelet-taglib</span> <span class="re0">version</span>=<span class="st0">&quot;2.0&quot;</span></span>
<span class="sc3">   <span class="re0">xmlns</span>=<span class="st0">&quot;http://java.sun.com/xml/ns/javaee&quot;</span></span>
<span class="sc3">   <span class="re0">xmlns:xsi</span>=<span class="st0">&quot;http://www.w3.org/2001/XMLSchema-instance&quot;</span></span>
<span class="sc3">   <span class="re0">xsi:schemaLocation</span>=<span class="st0">&quot;http://java.sun.com/xml/ns/javaee</span>
<span class="sc3">   http://java.sun.com/xml/ns/javaee/web-facelettaglibary_2_0.xsd&quot;</span><span class="re2">&gt;</span></span>
   <span class="sc3"><span class="re1">&lt;namespace<span class="re2">&gt;</span></span></span>http://corejsf.com<span class="sc3"><span class="re1">&lt;/namespace<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;tag<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;tag-name<span class="re2">&gt;</span></span></span>pager<span class="sc3"><span class="re1">&lt;/tag-name<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;component<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;component-type<span class="re2">&gt;</span></span></span>javax.faces.Command<span class="sc3"><span class="re1">&lt;/component-type<span class="re2">&gt;</span></span></span>
         <span class="sc3"><span class="re1">&lt;renderer-type<span class="re2">&gt;</span></span></span>com.corejsf.Pager<span class="sc3"><span class="re1">&lt;/renderer-type<span class="re2">&gt;</span></span></span>
      <span class="sc3"><span class="re1">&lt;/component<span class="re2">&gt;</span></span></span>
   <span class="sc3"><span class="re1">&lt;/tag<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/facelet-taglib<span class="re2">&gt;</span></span></span></pre></div></div>
<p>具体实现如图，代码在tomcat 6.0.29 x64测试通过。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/27/jsf%e4%b8%ad%e4%b8%badatatable%e5%a2%9e%e5%8a%a0%e7%bf%bb%e9%a1%b5%e5%8a%9f%e8%83%bd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Five tips to convert more customers</title>
		<link>http://www.qiutian.occm.cn/2010/08/23/five-tips-to-convert-more-customers/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/23/five-tips-to-convert-more-customers/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:41:52 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[商业金融]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=68</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>By Netregistry</p>

If you’ve opened your ecommerce store and are ready to sell online, one of the biggest
challenges is trying to convince site visitors to become customers. The internet is a browsing
medium, allowing potential customers to flit from online store to online store, looking for the
cheapest price or best bargain, until they decide to make a purchase. Therefore, it is important
to provide an online store that recognises this.

Unlike the real world, where the presence of a helpful sales assistant can sometimes [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.netregistry.com.au">By Netregistry</a></p>
<div id="_mcePaste">
<div id="_mcePaste">If you’ve opened your ecommerce store and are ready to sell online, one of the biggest</div>
<div id="_mcePaste">challenges is trying to convince site visitors to become customers. The internet is a browsing</div>
<div id="_mcePaste">medium, allowing potential customers to flit from online store to online store, looking for the</div>
<div id="_mcePaste">cheapest price or best bargain, until they decide to make a purchase. Therefore, it is important</div>
<div id="_mcePaste">to provide an online store that recognises this.</div>
<div></div>
<div id="_mcePaste">Unlike the real world, where the presence of a helpful sales assistant can sometimes close a</div>
<div id="_mcePaste">sale on a wavering store visitor, the internet has a back button that makes it far easier for your</div>
<div id="_mcePaste">visitors to leave your store quickly and anonymously. So how do you close those sales?</div>
</div>
<div></div>
<div>
<h2>Keep it simple</h2>
<div></div>
<div>Most people shop online for convenience, so it is imperative that your online store has an</div>
<div>easy purchasing process. Don’t overcomplicate your online store by using forms, requiring</div>
<div>registration or using complex navigation if you don’t have to. Always ensure a customer can</div>
<div>click a button at any time to go straight to a purchase.</div>
<div></div>
<h2>Secure and easy payments</h2>
<div></div>
<div>One of the biggest worries to internet shoppers is the security of their credit card details when</div>
<div>buying their online bargains.</div>
<div>By ordering a dedicated or shared SSL certificate from Netregistry, you can show your</div>
<div>customers their payment transactions are safely encrypted to protect their valuable information.</div>
<div></div>
<div><span id="more-68"></span></div>
<div></div>
<h2>Landing pages that sell</h2>
<div></div>
<div>Visitors may arrive at your online store through a variety of routes, meaning they may land</div>
<div>on different pages of your website.</div>
<div>Because of this, ensure each relevant landing page is focussed on closing that particular</div>
<div>sale. The internet is about instant gratification, so reward a visitor searching for your</div>
<div>bargains with a quick response to their needs. Each landing page should be designed</div>
<div>to provide a simple ‘one click sale’ if at all possible, providing an instant solution to the</div>
<div>visitor’s request, whilst removing clutter. Take the visitor by the hand and lead them where</div>
<div>you want them to go.</div>
<div></div>
<h2>Make them an offer they can’t refuse</h2>
<div></div>
<div>That’s what Domino Pizza did when they entered the competitive pizza home delivery</div>
<div>market with their “30 minutes or it’s free” campaign. What can your online store offer to</div>
<div>encourage customers to buy from you instead of any of the other online stores fighting for</div>
<div>their attention; cheap deals on fast delivery, a money-back guarantee, free upgrades?</div>
<div>The online shopping world is different to the high street, where your shop is only</div>
<div>competing with sellers in the local area. Online, a customer can visit numerous stores in</div>
<div>minutes to compare prices and deals, increasing competition dramatically. Ensure your</div>
<div>offer stands out from the rest.</div>
<div></div>
<h2>Have postage and shipping alternatives advertised up front</h2>
<div></div>
<div>It is common for customers to abandon a purchase at the very last page of the payment</div>
<div>process once the postage is factored into the overall price, catching them by surprise. By</div>
<div>offering fair postage rates up front, you allow a customer to effectively assess the value of</div>
<div>buying through your store.</div>
<div>Offer alternative methods of postage, where possible. Some online stores offer delivery only by</div>
<div>courier, or other expensive methods, which can turn customers away. Courier costs can more</div>
<div>than double the price of an item in some cases, immediately short-circuiting a sale. Ensure</div>
<div>every product on your website has a cost-effective postage solution that makes the whole</div>
<div>package attractive to the buyer.</div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/23/five-tips-to-convert-more-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to make your customers love you</title>
		<link>http://www.qiutian.occm.cn/2010/08/23/how-to-make-your-customers-love-you/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/23/how-to-make-your-customers-love-you/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:33:48 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[商业金融]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=65</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' -->
In a bricks-and-mortar store, customers can be served with a smile and a helping hand.


However, in the online world, there are many other factors to consider, such as dealing with postage and delivery issues and handling online queries. Luke Telford talks with two people from online stores about the challenges they face and how they use their service strategies to ensure their customers are taken care of online, all the time.

</p>
Monsterthreads: tailoring your style
“Effective communication is essential in business, and [...]]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">
<div id="_mcePaste"><strong>In a bricks-and-mortar store, customers can be served with a smile and a helping hand.</strong></div>
<div id="_mcePaste"><strong><br />
</strong></div>
<div id="_mcePaste"><strong>However, in the online world, there are many other factors to consider, such as dealing with postage and delivery issues and handling online queries. Luke Telford talks with two people from online stores about the challenges they face and how they use their service strategies to ensure their customers are taken care of online, all the time.</strong></div>
<div></div>
<div><strong></p>
<h2><span style="font-weight: normal;">Monsterthreads: tailoring your style</span></h2>
<div><span style="font-weight: normal;">“Effective communication is essential in business, and the internet is essential for connecting with the public, especially gen X and Y,” says Mark Mamrot, CEO and owner of online t-shirt retailer Monsterthreads.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;"> “Online and face-to-face customers have strong service expectations, and your ability to meet those expectations shapes their perception of you. In a physical shop, customers can judge the quality of your business by many elements but online, the interaction is often limited to a relatively static website. Your responsiveness, therefore, is crucial to the customer’s experience.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“When dealing with customers online, responsiveness is definitely an important factor. However, manner is also crucial. It will vary from business to business – for a company such as ours, customers need to be treated with a personal touch. We treat our customers as we would treat our friends, and often go beyond our obligations to keep them satisfied and maintain the personality of the Monsterthreads brand.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“Of course, we do accommodate customer feedback. We have a ‘comments and feedback’ field integrated into our order process, and we use mailing list software with a return address. We also perform periodic satisfaction surveys. Most importantly, we act on what we learn from those surveys.</span></div>
<div></div>
<div><span style="font-weight: normal;"><span id="more-65"></span><br />
</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“Every bit of feedback receives a reply, whether it’s a thank-you, an apology or an explanation. When you deal with thousands of customers, you will encounter a diverse range of people, including some with unreasonable expectations. It’s important to understand that not everyone can be utterly satisfied with your product, especially with a product as personal as garments. However, just about everyone can be satisfied with your customer service effort.’</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<h2><span style="font-weight: normal;">Mag Nation: grasping the leap of faith</span></h2>
<div><span style="font-weight: normal;">“The willingness of customers to shop online means we’re not just competing with the newsagent up the block; we’re also competing with newsagents in Perth, as well as Amazon and other online magazine stores,” explains Oliver Palmer, online operator of MagNation.com.au.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;"> “Customer service is paramount when other retailers are willing to deliver the same product at a similar price. Word of mouth is exponentially quicker than it was even five years ago. Tony Hsieh from online clothing store Zappos said that they’re not in the retail business so much as the customer service business, and we agree with this wholeheartedly.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“It’s hard to put a figure on how much time we spend interacting with customers but we keep a keen eye on Facebook and Twitter and make a point of responding to comments and tweets. Our customers have come to view our social media presence as a resource where they find out about new magazines or when titles are coming into our stores, and that’s not only useful for them but it’s also a great way for us to keep in touch with demand and shifting trends.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;"> “We don’t have any complicated CRM systems to handle feedback; everything we use is off-the-shelf. Email, Twitter, Facebook and our blog runs on WordPress. We have a contact form on our website and get a lot of feedback via Facebook and tweets.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“Some essential elements for good customer service involve open communication and delivering what you promise. If something goes wrong, be honest and do whatever it takes to fix it.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">“An anonymous commenter recently spammed seven of our most recent blog posts, accusing us of a litany of crimes. We decided to publish the comment in its entirety on a dedicated post and to debunk each of their accusations one by one. In this case, many of our customers sprang to our defence.</span></div>
<div><span style="font-weight: normal;"><br />
</span></div>
<div><span style="font-weight: normal;">It took us a while to realise something that’s seemingly obvious – our customers online are taking a leap of faith by purchasing from us, or indeed any online store. They’re giving us their money upfront for a product that will be delivered over the course of an entire year and as a result, they often need a bit more care than in-store customers.”</span></div>
<p></strong></div>
</div>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/23/how-to-make-your-customers-love-you/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2010 CWE/SANS Top 25 Most Dangerous Software Errors</title>
		<link>http://www.qiutian.occm.cn/2010/08/23/2010-cwesans-top-25-most-dangerous-software-errors/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/23/2010-cwesans-top-25-most-dangerous-software-errors/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 07:28:55 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=62</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>http://cwe.mitre.org/top25/#Listing</p>
]]></description>
			<content:encoded><![CDATA[<p><a href="http://cwe.mitre.org/top25/#Listing">http://cwe.mitre.org/top25/#Listing</a></p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/23/2010-cwesans-top-25-most-dangerous-software-errors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>让Alfresco Explorer中表单提交后不回到页面顶端</title>
		<link>http://www.qiutian.occm.cn/2010/08/18/%e8%ae%a9alfresco%e7%9a%84alfresco-explorer%e8%a1%a8%e6%a0%bc%e6%8f%90%e4%ba%a4%e5%90%8e%e4%b8%8d%e5%9b%9e%e5%88%b0%e9%a1%b6%e7%ab%af/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/18/%e8%ae%a9alfresco%e7%9a%84alfresco-explorer%e8%a1%a8%e6%a0%bc%e6%8f%90%e4%ba%a4%e5%90%8e%e4%b8%8d%e5%9b%9e%e5%88%b0%e9%a1%b6%e7%ab%af/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 09:56:07 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[网络开发 [Web-based Development]]]></category>
		<category><![CDATA[alfresco]]></category>
		<category><![CDATA[Alfresco Explorer]]></category>
		<category><![CDATA[auto scrolling]]></category>
		<category><![CDATA[form submit]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=54</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>无论新的surf怎么好，起码现在还仍然不太成熟，老的Alfresco Explorer虽然技术较为落后，但是功能和各方面仍然比新的UI成熟很多。</p>
<p>如果你经常使用alfresco explorer来进行文档和记录管理和编辑，你会发现当你在同一个页面中有多个form的时候，每次form提交该页面都会自动回到首页，如果你的页面很长，这个问题很是烦人。（其实在使用ajax list or space or whatever picker等UI的时候都会有同样的问题，增加和删除项后form提交会导致页面回到顶端）</p>
<p>在alfresco.war的web.xml中有一个项可以修复该问题。编辑web.xml，找到：</p>
Source code&#160;&#160;&#160;&#60;context-param&#62;
        &#60;param-name&#62;org.apache.myfaces.AUTO_SCROLL&#60;/param-name&#62;
        &#60;param-value&#62;true&#60;/param-value&#62;
        &#60;description&#62;
            If true, a javascript function will be rendered that is able to restore the
            former vertical scroll on every request. Convenient feature if you [...]]]></description>
			<content:encoded><![CDATA[<p>无论新的surf怎么好，起码现在还仍然不太成熟，老的Alfresco Explorer虽然技术较为落后，但是功能和各方面仍然比新的UI成熟很多。</p>
<p>如果你经常使用alfresco explorer来进行文档和记录管理和编辑，你会发现当你在同一个页面中有多个form的时候，每次form提交该页面都会自动回到首页，如果你的页面很长，这个问题很是烦人。（其实在使用ajax list or space or whatever picker等UI的时候都会有同样的问题，增加和删除项后form提交会导致页面回到顶端）</p>
<p>在alfresco.war的web.xml中有一个项可以修复该问题。编辑web.xml，找到：</p>
<div id="wpshdo_30" class="wp-synhighlighter-outer"><div id="wpshdt_30" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_30"></a><a id="wpshat_30" class="wp-synhighlighter-title" href="#codesyntax_30"  onClick="javascript:wpsh_toggleBlock(30)" title="Click to show/hide code block">Source code</a></td><td align="right"><a href="#codesyntax_30" onClick="javascript:wpsh_code(30)" title="Show code only"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_30" onClick="javascript:wpsh_print(30)" title="Print code"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://www.qiutian.occm.cn/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_30" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;context-param<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;param-name<span class="re2">&gt;</span></span></span>org.apache.myfaces.AUTO_SCROLL<span class="sc3"><span class="re1">&lt;/param-name<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;param-value<span class="re2">&gt;</span></span></span>true<span class="sc3"><span class="re1">&lt;/param-value<span class="re2">&gt;</span></span></span>
        <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>
            If true, a javascript function will be rendered that is able to restore the
            former vertical scroll on every request. Convenient feature if you have pages
            with long lists and you do not want the browser page to always jump to the top
            if you trigger a link or button action that stays on the same page.
            Default: &quot;false&quot;
        <span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;/context-param<span class="re2">&gt;</span></span></span></pre></div></div>
<p>3.2r2中没编辑过的话在56-66行，将其中的param-value 由 false改为ture就可以了。</p>
<p>修改后使用myface auto scrolling功能记录你上次的位置，方便了许多。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/18/%e8%ae%a9alfresco%e7%9a%84alfresco-explorer%e8%a1%a8%e6%a0%bc%e6%8f%90%e4%ba%a4%e5%90%8e%e4%b8%8d%e5%9b%9e%e5%88%b0%e9%a1%b6%e7%ab%af/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>5 easy ways to keep your customers</title>
		<link>http://www.qiutian.occm.cn/2010/08/16/5-easy-ways-to-keep-your-customers/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/16/5-easy-ways-to-keep-your-customers/#comments</comments>
		<pubDate>Mon, 16 Aug 2010 06:13:03 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[商业金融]]></category>
		<category><![CDATA[CRM]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=49</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>

	

David Binning</p>
<p>3 August 2010</p>
<p>The more useful information you know about your customers, the better you can understand and address their needs.</p>
<p>Chosen carefully and implemented intelligently, a customer relationship management (CRM) system can help you gain powerful insights into what makes your customers tick.</p>
<p>The key to getting customer relationship management right is in deciding the best questions to ask and then figuring out what to do with the answers. Before you begin asking your customers questions though, ask yourself some:</p>
<p>* Who [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.qiutian.occm.cn/wp-content/gallery/5-easy-ways-to-keep-your-customers/r3350-acerin.jpg" title="" class="shutterset_singlepic1" >
	<img class="ngg-singlepic ngg-left" src="http://www.qiutian.occm.cn/wp-content/gallery/cache/1__320x240_r3350-acerin.jpg" alt="r3350-acerin" title="r3350-acerin" />
</a>
David Binning</p>
<p>3 August 2010</p>
<p><strong>The more useful information you know about your customers, the better you can understand and address their needs.</strong></p>
<p>Chosen carefully and implemented intelligently, a customer relationship management (CRM) system can help you gain powerful insights into what makes your customers tick.</p>
<p>The key to getting customer relationship management right is in deciding the best questions to ask and then figuring out what to do with the answers. Before you begin asking your customers questions though, ask yourself some:</p>
<p>* Who are your customers?<br />
* What are the main subgroups?<br />
* How do you currently interact with them, and how would you like to interact with them?<br />
* What do they currently buy from you, and what do you think they might buy in the future?<br />
* How long have they been customers, and what do you know about why they chose to do business with you?</p>
<p>CRM systems provide a framework to collect and process all of the information about the people who buy, or should be buying from you, so that you can develop smarter and more effective strategies for targeting them, while tracking your success beyond the mere fact of a sale.<span id="more-49"></span></p>
<h2>1. Segment your customer base</h2>
<p>In order for CRM systems to be effective, it is important to feed in as much useful information as possible on your customers.</p>
<p>This data should include a record of all conversations and interactions, from emails to phone calls and other channels. Also consider the customer experience of purchases, including with your competitors, and dates, return of goods for whatever reason, complaints and other post-sale feedback, including expressions of dissatisfaction.</p>
<p>Then there’s all the information specific to each customer, such as company and industry, name, job title and gender of key contacts, as well as how long they’ve been with the company and even their budget.</p>
<p>According to Michael Loop from digital marketing specialist Datarati, it’s vital to start from scratch and to ensure that the data entered is clean.</p>
<p>“It’s important to have rules for validation in systems so that segmentation is clean and accurate and the system is free from duplications,” he says. “If you don’t have that information you will be sending out inconsistent messaging and possibly creating duplication.”</p>
<h2>2. Work out which information to focus on</h2>
<p>Obvious information to capture includes the best method of contacting and interacting with customers, such as whether they prefer to be phoned or emailed and whether there are best times for contact. And as Foster stresses, make sure that your customers want to hear from you.</p>
<p>“You really need to know whether you have permission to send people emails, for instance,” he says. If you don’t have permission, you will be contravening spam/privacy laws.</p>
<p>Digital communications, especially via the web, are creating new opportunities to monitor and respond to customer behaviour. For instance, Datarati’s Loop suggests that companies pay close attention to what information is accessed on their websites, such as market reports, case studies or other materials that might provide insight into what customers are thinking about. Personal information is also very important. In the past, the more popular sources in the business world might have been bars and golf courses; now social networking is emerging as a useful source of ‘highly enriched data’ that can be applied to increase the effectiveness of CRM systems.</p>
<h2>3. When you have the data, how do you use it?</h2>
<p>A big point of getting CRM right, is that it boosts your ability to craft more intelligent and targeted campaigns for the future, while also giving you useful ways to refine your general interaction with customers.</p>
<p>For instance, information from a CRM system might lead to an email campaign being segmented into different groups presenting different incentives or special offers depending on past history. “Try to look at trends for customers and export that data to things like email marketing,” Foster suggests.</p>
<h2>4. Make use of your CRM system day-to-day: checklist</h2>
<p>* Train your staff – A CRM system will only be as good as the people who use it. Therefore the most important thing to get right for successful implementation is staff education.</p>
<p>* Ensure it gets used – CRM takes time and effort, and sales and other staff need to understand what’s in it for them. Unless there is a full understanding of and commitment to the concept of CRM, its value to your organisation will always be limited.</p>
<p>* Keep it fresh – Data has a use-by date, so it’s vital your team commits to keeping the data up-to-date and making the most of the latest information. “Start with something simple, such as just tracking every time you phone someone, until you begin to see value,” Shoeboxed’s Foster says. “Build on it over time.”</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/16/5-easy-ways-to-keep-your-customers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>买了个多功能电子相框，好像叫做iPad啊？ 还不错。</title>
		<link>http://www.qiutian.occm.cn/2010/08/09/%e4%b9%b0%e4%ba%86%e4%b8%aa%e5%a4%9a%e5%8a%9f%e8%83%bd%e7%94%b5%e5%ad%90%e7%9b%b8%e6%a1%86/</link>
		<comments>http://www.qiutian.occm.cn/2010/08/09/%e4%b9%b0%e4%ba%86%e4%b8%aa%e5%a4%9a%e5%8a%9f%e8%83%bd%e7%94%b5%e5%ad%90%e7%9b%b8%e6%a1%86/#comments</comments>
		<pubDate>Mon, 09 Aug 2010 11:38:39 +0000</pubDate>
		<dc:creator>qiutian</dc:creator>
				<category><![CDATA[科技小东东 [Tech Gadget]]]></category>
		<category><![CDATA[iPad]]></category>
		<category><![CDATA[jailbreak]]></category>

		<guid isPermaLink="false">http://www.qiutian.occm.cn/?p=43</guid>
		<description><![CDATA[<!-- cincopa_excerpt_rt = 'clean' --><p>18th-Aug-2010: 新的3.2.2出来了，暂时不能越狱，大家注意如果你越狱了，iTune叫你升级新版注意点“否”，在iTunes的功能设置选项中有禁止自动更新的选项，注意调整。</p>
<p>10th-Aug-2010: 这年头的电子相框还能“越狱”，昨晚上越狱成功，中途出现白苹果，不过现已修复。还有这个相框是基于Unix操作系统的，怪不得还挺贵 lolz</p>
<p>越狱后装了IPA补丁，很可能会白苹果，不过可以重新刷回来，
步骤如下： 1。进入刷机模式：按HOME+电源 10秒，然后放开电源继续按HOME，直到ITUNES连接界面出现
2。打开ITUNES会有显示一个IPAD需要恢复。
3。按提示确认恢复。
4。下载恢复固件后，自己手动关机
5。把ITUNES的帐号换成美国帐号，不然下面就进不去恢复的服务器。
6。再重复1~3，之后会出现连接服务器，连上后恢复，成功。</p>
<p>一般下载是30分钟（400M）恢复是15分钟。
以上是昨天恢复出厂设置的经过，请大家参考。</p>
<p>1，下载iPad 3.2固件；http:/ /appldnld.apple.com.edgesuite.net/content.info.apple.com/iPad/061-7987.20100403.mjiTr/iPad1,1_3.2_7B367_Restore.ipsw   文件大小：456.8mb
2，将开机就只能显示一个大白苹果的IPAD用数据线链接到安装有iTunes的电脑，这时候的显示还是卡在一个白苹果的界面。
3，同时按住圆点+开/关机键直到IPAD黑屏，松开开/关机键大约7秒左右直到Itunes检测到连接为止即进入DFU模式，
4，此时看到iTunes会显示有一个等待恢复的ipad。
5，按住键盘shift后点击iTunes恢复按钮，会出现一个对话框，此时请选择之前下载的固件文件进行恢复。
6，恢复进程约5分钟。耐心等待。。。您心爱的ipad马上就要回到您身边了。</p>
<p>9th-Aug-2010: 买了个多功能电子相框，好像叫做iPad啊？ 还不错。</p>
]]></description>
			<content:encoded><![CDATA[<p>18th-Aug-2010: 新的3.2.2出来了，暂时不能越狱，大家注意如果你越狱了，iTune叫你升级新版注意点“否”，在iTunes的功能设置选项中有禁止自动更新的选项，注意调整。</p>
<p>10th-Aug-2010: 这年头的电子相框还能“越狱”，昨晚上越狱成功，中途出现白苹果，不过现已修复。还有这个相框是基于Unix操作系统的，怪不得还挺贵 lolz</p>
<blockquote><p>越狱后装了IPA补丁，很可能会白苹果，不过可以重新刷回来，<br />
步骤如下： 1。进入刷机模式：按HOME+电源 10秒，然后放开电源继续按HOME，直到ITUNES连接界面出现<br />
2。打开ITUNES会有显示一个IPAD需要恢复。<br />
3。按提示确认恢复。<br />
4。下载恢复固件后，自己手动关机<br />
5。把ITUNES的帐号换成美国帐号，不然下面就进不去恢复的服务器。<br />
6。再重复1~3，之后会出现连接服务器，连上后恢复，成功。</p>
<p>一般下载是30分钟（400M）恢复是15分钟。<br />
以上是昨天恢复出厂设置的经过，请大家参考。</p>
<p>1，下载iPad 3.2固件；http:/ /appldnld.apple.com.edgesuite.net/content.info.apple.com/iPad/061-7987.20100403.mjiTr/iPad1,1_3.2_7B367_Restore.ipsw   文件大小：456.8mb<br />
2，将开机就只能显示一个大白苹果的IPAD用数据线链接到安装有iTunes的电脑，这时候的显示还是卡在一个白苹果的界面。<br />
3，同时按住圆点+开/关机键直到IPAD黑屏，松开开/关机键大约7秒左右直到Itunes检测到连接为止即进入DFU模式，<br />
4，此时看到iTunes会显示有一个等待恢复的ipad。<br />
5，按住键盘shift后点击iTunes恢复按钮，会出现一个对话框，此时请选择之前下载的固件文件进行恢复。<br />
6，恢复进程约5分钟。耐心等待。。。您心爱的ipad马上就要回到您身边了。</p></blockquote>
<p>9th-Aug-2010: 买了个多功能电子相框，好像叫做iPad啊？ 还不错。</p>
<p><a class="a2a_dd addtoany_share_save" href="http://www.addtoany.com/share_save"><img src="http://www.qiutian.occm.cn/wp-content/plugins/add-to-any/share_save_171_16.png" width="171" height="16" alt="Share/Bookmark"/></a> </p>]]></content:encoded>
			<wfw:commentRss>http://www.qiutian.occm.cn/2010/08/09/%e4%b9%b0%e4%ba%86%e4%b8%aa%e5%a4%9a%e5%8a%9f%e8%83%bd%e7%94%b5%e5%ad%90%e7%9b%b8%e6%a1%86/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

