Pages

01 二月 2012

Install Sun/Oracle JDK in Ubuntu 11.10

在Oracle買下Sun之後,Ubuntu上要安裝sun/oracle的JDK是愈來愈不容易...
還是做個筆記囉

安裝Sun JDK6

sudo add-apt-repository ppa:flexiondotorg/java 
sudo apt-get update
sudo apt-get install sun-java6-jdk sun-java6-plugin sun-java6-fonts

安裝Oracle JDK7
這部份主要是參考Intalling Java 7 on Ubuntu Natty (11.04)

  1. 請至Oracle http://www.oracle.com/technetwork/java/javase/downloads/index.html Download最新的檔案,要注意配合作業系統。下列的例子以x64為主。
  2. 解壓縮後移到/usr/lib/jvm裡,並重新命名為java-7-oracle-1.7.0_02,再修改owner為root,最後建一個名為java-7-oracle的link,這樣以後若有新的版本,就只要修改link即可。
      tar -xzf jdk-7u2-linux-x64.tar.gz
      sudo mv jdk1.7.0_02 /usr/lib/jvm/java-7-oracle-1.7.0_02
      cd /usr/lib/jvm
      sudo chown -R root:root java-7-oracle-1.7.0_02
      sudo ln -s java-7-oracle-1.7.0_02 java-7-oracle
    
  3. 以root的身份執行下列的指令,若不想一直下sudo,就先執行sudo -sH來切換身份吧
    update-alternatives --quiet --install /usr/lib/xulrunner-addons/plugins/libjavaplugin.so xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 63
    update-alternatives --quiet --install /usr/lib/mozilla/plugins/libjavaplugin.so mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so 63
    update-alternatives --quiet --install /usr/bin/appletviewer appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer 63 --slave /usr/share/man/man1/appletviewer.1 appletviewer.1 /usr/lib/jvm/java-7-oracle/man/man1/appletviewer.1
    update-alternatives --quiet --install /usr/bin/apt apt /usr/lib/jvm/java-7-oracle/bin/apt 63 --slave /usr/share/man/man1/apt.1 apt.1 /usr/lib/jvm/java-7-oracle/man/man1/apt.1
    update-alternatives --quiet --install /usr/bin/extcheck extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck 63 --slave /usr/share/man/man1/extcheck.1 extcheck.1 /usr/lib/jvm/java-7-oracle/man/man1/extcheck.1
    update-alternatives --quiet --install /usr/bin/idlj idlj /usr/lib/jvm/java-7-oracle/bin/idlj 63 --slave /usr/share/man/man1/idlj.1 idlj.1 /usr/lib/jvm/java-7-oracle/man/man1/idlj.1
    update-alternatives --quiet --install /usr/bin/jar jar /usr/lib/jvm/java-7-oracle/bin/jar 63 --slave /usr/share/man/man1/jar.1 jar.1 /usr/lib/jvm/java-7-oracle/man/man1/jar.1
    update-alternatives --quiet --install /usr/bin/jarsigner jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner 63 --slave /usr/share/man/man1/jarsigner.1 jarsigner.1 /usr/lib/jvm/java-7-oracle/man/man1/jarsigner.1
    update-alternatives --quiet --install /usr/bin/javac javac /usr/lib/jvm/java-7-oracle/bin/javac 63 --slave /usr/share/man/man1/javac.1 javac.1 /usr/lib/jvm/java-7-oracle/man/man1/javac.1
    update-alternatives --quiet --install /usr/bin/javadoc javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc 63 --slave /usr/share/man/man1/javadoc.1 javadoc.1 /usr/lib/jvm/java-7-oracle/man/man1/javadoc.1
    update-alternatives --quiet --install /usr/bin/javah javah /usr/lib/jvm/java-7-oracle/bin/javah 63 --slave /usr/share/man/man1/javah.1 javah.1 /usr/lib/jvm/java-7-oracle/man/man1/javah.1
    update-alternatives --quiet --install /usr/bin/javap javap /usr/lib/jvm/java-7-oracle/bin/javap 63 --slave /usr/share/man/man1/javap.1 javap.1 /usr/lib/jvm/java-7-oracle/man/man1/javap.1
    update-alternatives --quiet --install /usr/bin/jconsole jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole 63 --slave /usr/share/man/man1/jconsole.1 jconsole.1 /usr/lib/jvm/java-7-oracle/man/man1/jconsole.1
    update-alternatives --quiet --install /usr/bin/jdb jdb /usr/lib/jvm/java-7-oracle/bin/jdb 63 --slave /usr/share/man/man1/jdb.1 jdb.1 /usr/lib/jvm/java-7-oracle/man/man1/jdb.1
    update-alternatives --quiet --install /usr/bin/jhat jhat /usr/lib/jvm/java-7-oracle/bin/jhat 63 --slave /usr/share/man/man1/jhat.1 jhat.1 /usr/lib/jvm/java-7-oracle/man/man1/jhat.1
    update-alternatives --quiet --install /usr/bin/jinfo jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo 63 --slave /usr/share/man/man1/jinfo.1 jinfo.1 /usr/lib/jvm/java-7-oracle/man/man1/jinfo.1
    update-alternatives --quiet --install /usr/bin/jmap jmap /usr/lib/jvm/java-7-oracle/bin/jmap 63 --slave /usr/share/man/man1/jmap.1 jmap.1 /usr/lib/jvm/java-7-oracle/man/man1/jmap.1
    update-alternatives --quiet --install /usr/bin/jps jps /usr/lib/jvm/java-7-oracle/bin/jps 63 --slave /usr/share/man/man1/jps.1 jps.1 /usr/lib/jvm/java-7-oracle/man/man1/jps.1
    update-alternatives --quiet --install /usr/bin/jrunscript jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript 63 --slave /usr/share/man/man1/jrunscript.1 jrunscript.1 /usr/lib/jvm/java-7-oracle/man/man1/jrunscript.1
    update-alternatives --quiet --install /usr/bin/jsadebugd jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd 63 --slave /usr/share/man/man1/jsadebugd.1 jsadebugd.1 /usr/lib/jvm/java-7-oracle/man/man1/jsadebugd.1
    update-alternatives --quiet --install /usr/bin/jstack jstack /usr/lib/jvm/java-7-oracle/bin/jstack 63 --slave /usr/share/man/man1/jstack.1 jstack.1 /usr/lib/jvm/java-7-oracle/man/man1/jstack.1
    update-alternatives --quiet --install /usr/bin/jstat jstat /usr/lib/jvm/java-7-oracle/bin/jstat 63 --slave /usr/share/man/man1/jstat.1 jstat.1 /usr/lib/jvm/java-7-oracle/man/man1/jstat.1
    update-alternatives --quiet --install /usr/bin/jstatd jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd 63 --slave /usr/share/man/man1/jstatd.1 jstatd.1 /usr/lib/jvm/java-7-oracle/man/man1/jstatd.1
    update-alternatives --quiet --install /usr/bin/native2ascii native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii 63 --slave /usr/share/man/man1/native2ascii.1 native2ascii.1 /usr/lib/jvm/java-7-oracle/man/man1/native2ascii.1
    update-alternatives --quiet --install /usr/bin/rmic rmic /usr/lib/jvm/java-7-oracle/bin/rmic 63 --slave /usr/share/man/man1/rmic.1 rmic.1 /usr/lib/jvm/java-7-oracle/man/man1/rmic.1
    update-alternatives --quiet --install /usr/bin/schemagen schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen 63 --slave /usr/share/man/man1/schemagen.1 schemagen.1 /usr/lib/jvm/java-7-oracle/man/man1/schemagen.1
    update-alternatives --quiet --install /usr/bin/serialver serialver /usr/lib/jvm/java-7-oracle/bin/serialver 63 --slave /usr/share/man/man1/serialver.1 serialver.1 /usr/lib/jvm/java-7-oracle/man/man1/serialver.1
    update-alternatives --quiet --install /usr/bin/wsgen wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen 63 --slave /usr/share/man/man1/wsgen.1 wsgen.1 /usr/lib/jvm/java-7-oracle/man/man1/wsgen.1
    update-alternatives --quiet --install /usr/bin/wsimport wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport 63 --slave /usr/share/man/man1/wsimport.1 wsimport.1 /usr/lib/jvm/java-7-oracle/man/man1/wsimport.1
    update-alternatives --quiet --install /usr/bin/xjc xjc /usr/lib/jvm/java-7-oracle/bin/xjc 63 --slave /usr/share/man/man1/xjc.1 xjc.1 /usr/lib/jvm/java-7-oracle/man/man1/xjc.1
    update-alternatives --quiet --install /usr/bin/java-rmi.cgi java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi 63
    update-alternatives --quiet --install /usr/bin/ControlPanel ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel 63
    update-alternatives --quiet --install /usr/bin/java java /usr/lib/jvm/java-7-oracle/jre/bin/java 63
    update-alternatives --quiet --install /usr/bin/java_vm java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm 63
    update-alternatives --quiet --install /usr/bin/javaws javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws 63
    update-alternatives --quiet --install /usr/bin/jcontrol jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol 63
    update-alternatives --quiet --install /usr/bin/keytool keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool 63
    update-alternatives --quiet --install /usr/bin/pack200 pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200 63
    update-alternatives --quiet --install /usr/bin/policytool policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool 63
    update-alternatives --quiet --install /usr/bin/rmid rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid 63
    update-alternatives --quiet --install /usr/bin/rmiregistry rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry 63
    update-alternatives --quiet --install /usr/bin/unpack200 unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200 63
    update-alternatives --quiet --install /usr/bin/orbd orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd 63
    update-alternatives --quiet --install /usr/bin/servertool servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool 63
    update-alternatives --quiet --install /usr/bin/tnameserv tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv 63
    update-alternatives --quiet --install /usr/bin/jexec jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec 63
    
  4. 在/usr/lib/jvm建一份.java-7-oracle.jinfo的清單,請注意這是個隱藏檔,所以檔名是有個'.'
    sudo vim /usr/lib/jvm/.java-7-oracle.jinfo
    
    內容則如下
    name=java-7-oracle
    alias=java-7-oracle
    priority=63
    section=non-free
    
    jre ControlPanel /usr/lib/jvm/java-7-oracle/jre/bin/ControlPanel
    jre java /usr/lib/jvm/java-7-oracle/jre/bin/java
    jre java_vm /usr/lib/jvm/java-7-oracle/jre/bin/java_vm
    jre javaws /usr/lib/jvm/java-7-oracle/jre/bin/javaws
    jre jcontrol /usr/lib/jvm/java-7-oracle/jre/bin/jcontrol
    jre keytool /usr/lib/jvm/java-7-oracle/jre/bin/keytool
    jre pack200 /usr/lib/jvm/java-7-oracle/jre/bin/pack200
    jre policytool /usr/lib/jvm/java-7-oracle/jre/bin/policytool
    jre rmid /usr/lib/jvm/java-7-oracle/jre/bin/rmid
    jre rmiregistry /usr/lib/jvm/java-7-oracle/jre/bin/rmiregistry
    jre unpack200 /usr/lib/jvm/java-7-oracle/jre/bin/unpack200
    jre orbd /usr/lib/jvm/java-7-oracle/jre/bin/orbd
    jre servertool /usr/lib/jvm/java-7-oracle/jre/bin/servertool
    jre tnameserv /usr/lib/jvm/java-7-oracle/jre/bin/tnameserv
    jre jexec /usr/lib/jvm/java-7-oracle/jre/lib/jexec
    jdk appletviewer /usr/lib/jvm/java-7-oracle/bin/appletviewer
    jdk apt /usr/lib/jvm/java-7-oracle/bin/apt
    jdk extcheck /usr/lib/jvm/java-7-oracle/bin/extcheck
    jdk idlj /usr/lib/jvm/java-7-oracle/bin/idlj
    jdk jar /usr/lib/jvm/java-7-oracle/bin/jar
    jdk jarsigner /usr/lib/jvm/java-7-oracle/bin/jarsigner
    jdk java-rmi.cgi /usr/lib/jvm/java-7-oracle/bin/java-rmi.cgi
    jdk javac /usr/lib/jvm/java-7-oracle/bin/javac
    jdk javadoc /usr/lib/jvm/java-7-oracle/bin/javadoc
    jdk javah /usr/lib/jvm/java-7-oracle/bin/javah
    jdk javap /usr/lib/jvm/java-7-oracle/bin/javap
    jdk jconsole /usr/lib/jvm/java-7-oracle/bin/jconsole
    jdk jdb /usr/lib/jvm/java-7-oracle/bin/jdb
    jdk jhat /usr/lib/jvm/java-7-oracle/bin/jhat
    jdk jinfo /usr/lib/jvm/java-7-oracle/bin/jinfo
    jdk jmap /usr/lib/jvm/java-7-oracle/bin/jmap
    jdk jps /usr/lib/jvm/java-7-oracle/bin/jps
    jdk jrunscript /usr/lib/jvm/java-7-oracle/bin/jrunscript
    jdk jsadebugd /usr/lib/jvm/java-7-oracle/bin/jsadebugd
    jdk jstack /usr/lib/jvm/java-7-oracle/bin/jstack
    jdk jstat /usr/lib/jvm/java-7-oracle/bin/jstat
    jdk jstatd /usr/lib/jvm/java-7-oracle/bin/jstatd
    jdk native2ascii /usr/lib/jvm/java-7-oracle/bin/native2ascii
    jdk rmic /usr/lib/jvm/java-7-oracle/bin/rmic
    jdk schemagen /usr/lib/jvm/java-7-oracle/bin/schemagen
    jdk serialver /usr/lib/jvm/java-7-oracle/bin/serialver
    jdk wsgen /usr/lib/jvm/java-7-oracle/bin/wsgen
    jdk wsimport /usr/lib/jvm/java-7-oracle/bin/wsimport
    jdk xjc /usr/lib/jvm/java-7-oracle/bin/xjc
    plugin xulrunner-1.9-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
    plugin mozilla-javaplugin.so /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so
    
  5. update java alternatives 這時準備工作就完成了,可以開始設定ubuntu預設使用的jdk了 先執行下列指令
    sudo update-alternatives --config java
    
    正常的話可以看到下列的提示
    There are 2 choices for the alternative java (providing /usr/bin/java).
    
      Selection    Path                                     Priority   Status
    ------------------------------------------------------------
    * 0            /usr/lib/jvm/java-6-sun/jre/bin/java      63        auto mode
      1            /usr/lib/jvm/java-6-sun/jre/bin/java      63        manual mode
      2            /usr/lib/jvm/java-7-oracle/jre/bin/java   63        manual mode
    
    此刻再輸入號碼2,選擇jdk7做為預設的java版本
    當然也可以直接執行下列指令來改改
    sudo update-java-alternatives --set java-7-oracle
    

31 一月 2012

Git over Apache2 http server in Ubuntu 11.10

由於手邊的MBP年事已高(五歲多囉),而且RAM最大僅能加到3G,開了IDE與Browser後已經沒什麼多餘的能力來支撐一個VM了。所以把另一台NB裝上Ubuntu 11.10,並將常用的服務裝上去,順便做些更新的筆記。
先前也曾經有個安裝筆記GIT + Apache2 on Ubuntu 8.10 (1),但現在的Ubuntu安裝又更簡單些;主要是因為現在提供了git-http-backend,設定上可以更簡化了。

 

  1. 安裝apache 與 git
    sudo apt-get install apache2 git
    
    後期的Ubuntu 已將git-core更名為git,但是用git-core也沒問題啦。
  2. 建立相關人員帳號密碼,-c代表要建新檔,-m代表密碼要加密
    sudo htpasswd -cm /etc/apache2/passwd $username
    第二位成員起就不需要加-c,只要用-m即可
    sudo htpasswd -m /etc/apache2/passwd $username
  3. 建立git repositories目錄,依習慣,一定要先有repository root。
    sudo mkdir /srv/git
    再建要用的repository,並修改owner為www-data,$reponame代表repository的名稱,.git雖然可加可不加,但建議是要有,.git不會加到clone回來的目錄名稱上
    sudo git --bare init /srv/git/$reponame.git
    sudo chown -R www-data:www-data /srv/git/$reponame.git
  4. 建立dav_git.conf到/etc/apache2/mods-available,並link到/etc/apache2/mods-enabled,檔名可以隨意,但副檔名一定要是conf.
    cd /etc/apache2/mods-available
    sudo vim dav_git.conf

    編輯內容如下

    #若無設定GIT_HTTP_EXPORT_ALL,則在每個repository下必需有git-daemon-export-ok這個檔案才能被外部存取。
    SetEnv GIT_PROJECT_ROOT /srv/git
    SetEnv GIT_HTTP_EXPORT_ALL
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/
    #用Location的話代表讀寫都要認證,如果希望開放給anonymous讀取,請改用LocationMatch即可
    <Location /git>
            AuthType Basic
            AuthName "Git"
            Require valid-user
            AuthUserFile /etc/apache2/passwd
    </Location>
    
    建立link到/etc/apache2/mods-enabled
    cd /etc/apache2/mods-enabled
    sudo ln -s ../mods-available/dav_git.conf dav_git.conf
  5. 重起apache2即可

 

 

02 一月 2012

jQuery Plugin : DataTables (6)

前接jQuery Plugin : DataTables (5)

再來就是DataTables比較費工的地方。
大部份遇到的案子,Table/Grid裡除了顯示,通常還要可以加上checkbox, radio, button, link等操作,以提供多個選取刪除,單選編輯等功能。
這也是我覺得使用了DataTables,程式碼實際不會少多少,開發效率提昇待議的部份,但也可能是我能力的問題,若有大德能指引明燈,小弟會非常感激。

以下以在table裡加上checkbok與button的操作為例,
DataTables裡要多加Column就必需在aoColumns裡以mDataProp標示,由於資料並非自JSON Object裡取得,所以就必需設定為null.
而要顯示自訂的資料,就必需提供"fnRender"這個callback method,其中僅有一個參數oObj,oObj其中的aData就是目前這個Row的JSON Object,所以就可取得你要想的資料。

所以修改一下javascript的aoColumns:

"aoColumns": [
				{ "mDataProp": null, "fnRender": function(oObj){ return "<input type='checkbox' name='id' value='"+oObj.aData.id+"'>"}, "sWidth":"5%", "bSortable":false },
				{ "mDataProp": "id" },
				{ "mDataProp": "name" },
				{ "mDataProp": "phone" },
				{ "mDataProp": null, "fnRender": function(oObj){ return "<input type='button' value='Edit'>"}, "sWidth":"5%", "bSortable":false }
			]
當然對應的Table也要改一下Column的設定

完整的程式碼如下:

	<script type="text/javascript">
		var disTable;
		var gaiSelected = [];
		$().ready(function() {
			disTable = $("#sample").dataTable({
				"sPaginationType":"full_numbers",
				"bProcessing": true,
				"bServerSide":true,
				"sAjaxSource": '/jquery/DataTableServlet02',
				"fnServerParams": function ( aoData ) {
					$.merge(aoData, $("#myform").serializeArray());},
				"aoColumns": [
							  { "mDataProp": null, 
							  	"fnRender": function(oObj){ 
							  		return "<input type='checkbox' name='id' value='"+oObj.aData.id+"'>"}, 
							  	"sWidth":"5%", 
							  	"bSortable":false },
							  { "mDataProp": "id" },
				              { "mDataProp": "name" },
				              { "mDataProp": "phone" },
				              { "mDataProp": null, 
				              	"fnRender": function(oObj){ 
				              		return "<input type='button' value='Edit'>"}, 
				              	"sWidth":"5%", 
				              	"bSortable":false }
				          ]
			});
		});
	</script>
	<form id="myform">
	<table>
		<tr><td>NAME:</td><td><input type="text" name="name" /></td></tr>
		<tr><td>ID:</td><td><input type="text" name="id" /></td></tr>
		<tr><td>PHONE:</td><td><input type="text" name="phone" /></td></tr>
		<tr><td colspan="2"><input id="btnSearch" type="button" value="Search" onclick="disTable.fnDraw();"/></td></tr>
	</table>
	</form>
	<table id="sample" class="display">
		<thead>
			<tr>
				<th>Select</th>
				<th>ID</th>
				<th>Name</th>
				<th>Phone</th>
				<th>Function</th>
			</tr>
		</thead>
		<tbody>
		</tbody>
	</table>

產生的畫面就像下列這樣:

add checkbox and button

看起來似乎還不錯?不過大家實際遇到的例子應會比這更複雜吧,例如依不同的tag顯示不同的圖片,不同的狀態顯示不同的Button,這些全要寫在script中耶....

28 十二月 2011

jQuery Plugin : DataTables (5)

前接jQuery Plugin : DataTables (4)

這裡開始的思路跟我早期的想法不一樣,主要原因是在DataTables call ajax 的時刻。
對我先前的BaseCRUD模式而言,在init時就會自DB取得第一頁的資料以供顯示。
如果透過DataTables來處理,就代表不需要在init階段處理這部份。
但無論如何,Search Form的存在還是必要的,DataTables第一次找回來的資料也必需符合Form初始化的選項;也就代表DataTables要能加入目前現有Form的欄位做為參數。

第一步還是先要訂個Form吧,並將submit改掉,改用button呼叫javascript。因為DataTables的聯絡對象是用“sAjaxSource“指定的,所以Form的action就沒有作用了。

	<form id="myform">
	<table>
		<tr><td>NAME:</td><td><input type="text" name="name" /></td></tr>
		<tr><td>ID:</td><td><input type="text" name="id" /></td></tr>
		<tr><td>PHONE:</td><td><input type="text" name="phone" /></td></tr>
		<tr><td colspan="2"><input id="btnSearch" type="button" value="Search" onclick="disTable.fnDraw();"/></td></tr>
	</table>
	</form>
至於disTable.fnDraw()就稍後再解釋。

第二步就要修改DataTables的呼叫,加入fnServerParams。

"fnServerParams": function ( aoData ) {
					$.merge(aoData, $("#myform").serializeArray());
				}
藉用jQuery.merge(),將Form裡的欄位資料加入DataTables ajax呼叫參數中。

第三步為了讓Button能觸發DataTables的更新,所以必需保留被DataTables enhanced 過的變數,然後以var_enhanced.fnDraw();來更新資料修改過的javascript 大約如下

	<script type="text/javascript">
		var disTable; //保留被DataTables enhanced 過的變數
		$().ready(function() {
			disTable = $("#sample").dataTable({
				"sPaginationType":"full_numbers",
				"bProcessing": true,
				"bServerSide":true,
				"sAjaxSource": '/jquery/DataTableServlet02',
				"fnServerParams": function ( aoData ) {
					$.merge(aoData, $("#myform").serializeArray());},
				"aoColumns": [
							  { "mDataProp": "id" },
				              { "mDataProp": "name" },
				              { "mDataProp": "phone" }
				          ]
			});
		});
	</script>

再來就是修改Search method用到的參數,與DataTables就無關了。

jQuery Plugin : DataTables (4)

前接jQuery Plugin : DataTables (3)

如果要讓DataTables完全聽命於Server端,無論大小時都要問過Server時,就要加入“bServerSide“來告訴DataTables。
只要設定“bServerSide“為true之後,無論是換頁、排序、搜尋,DataTables一定會與sAjaxSource聯絡來取得正確的結果。
Server與Client之間的溝通當然必需先講好各自要用的參數,請先參考Server-side processing,下列僅說明必要的部份

Sent to Server Side:

  • sEcho : Client端在每次呼叫sAjaxSource時會產生一個特定的sEcho做為驗証碼,Server端必需在JSON中回傳相同的值做為認證
  • iDisplayStart : 目前顯示的是第幾筆資料
  • iDisplayLength : 畫面上單次顯示的資料筆數

Reply from Server Sise:

  • sEcho : Client送來的驗証碼,直接回傳不要做改變
  • iTotalRecords : 未經過濾的資料總筆數
  • iTotalDisplayRecords : 經過濾的資料總筆數,但在大部份的使用上情形上幾乎同於iTotalRecords
  • aaData : 回傳的資料的JSON Array

所以稍為改一下javascript

	<script type="text/javascript">
		$().ready(function() {
			$("#sample").dataTable({
				"sPaginationType":"full_numbers", //顯示頁數而非僅有上下頁的按鈕
				"bProcessing": true, //在進行ajax呼叫時,會提示Processing,並防止Double submit
				"bServerSide":true,
				"sAjaxSource": '/jquery/DataTableServlet02',
				"aoColumns": [
				              { "mDataProp": "id" },
				              { "mDataProp": "name" },
				              { "mDataProp": "phone" }
				          ]
		});
		});
	</script>

Server這端可以自訂一個TO,再利用jackson這樣的library將TO轉為JSON字串。

public class DataTableTO<T> {
	private List<T> aaData;
	private String sEcho;
	private Integer iTotalRecords;
	private Integer iTotalDisplayRecords;
	//--省略getter/setter.
}
public static final String toJson(DataTableTO<?> dt) {
	ObjectMapper mapper = new ObjectMapper(); //do some registry
	return mapper.writeValueAsString(dt);
}

這樣還未竟全功,畢竟我們在做查詢時多半都是透過一個<Form>來進行。