﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-　　　　　　　　　　　　　彬 ^_^ -文章分类-Dwr</title><link>http://www.blogjava.net/libin2722/category/30614.html</link><description>虚其心，可解天下之问；专其心，可治天下之学；静其心，可悟天下之理；恒其心，可成天下之业。</description><language>zh-cn</language><lastBuildDate>Fri, 04 Apr 2008 04:48:14 GMT</lastBuildDate><pubDate>Fri, 04 Apr 2008 04:48:14 GMT</pubDate><ttl>60</ttl><item><title>DWR 入門與應用（三）</title><link>http://www.blogjava.net/libin2722/articles/190766.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 04 Apr 2008 03:37:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/190766.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/190766.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/190766.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/190766.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/190766.html</trackback:ping><description><![CDATA[<span class="javascript" id="text167679">來寫個AJAX版的聊天室吧！先看看直接使用AJAX要如何做到，首先需要一個簡單的聊天室Servlet&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            31<br />
            32<br />
            33<br />
            34<br />
            35<br />
            36<br />
            37<br />
            38<br />
            39<br />
            40<br />
            41<br />
            42<br />
            43<br />
            44<br />
            45<br />
            46<br />
            47<br />
            48<br />
            49<br />
            50<br />
            51<br />
            52<br />
            53<br />
            54<br />
            55<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.io.IOException;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.io.PrintWriter;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.LinkedList;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.List;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>import</strong></font> javax.servlet.ServletException;<br />
            <font class="java-reserved_word"><strong>import</strong></font> javax.servlet.http.HttpServletRequest;<br />
            <font class="java-reserved_word"><strong>import</strong></font> javax.servlet.http.HttpServletResponse;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> ChatRoomServlet <font class="java-reserved_word"><strong>extends</strong></font> javax.servlet.http.HttpServlet <font class="java-reserved_word"><strong>implements</strong></font> javax.servlet.Servlet <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>private</strong></font> <font class="java-reserved_word"><strong>static</strong></font> LinkedList&lt;Message&gt; messages = <font class="java-reserved_word"><strong>new</strong></font> LinkedList&lt;Message&gt;();<br />
            <br />
            <font class="java-reserved_word"><strong>public</strong></font> ChatRoomServlet() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>super</strong></font>(); <br />
            <font class="java-bracket">}</font><br />
            <br />
            <font class="java-reserved_word"><strong>private</strong></font> List&lt;Message&gt; addMessage(String text) <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>if</strong></font> (text != <font class="java-reserved_word"><strong>null</strong></font> &amp;&amp; text.trim().length() &gt; 0) <font class="java-bracket">{</font><br />
            messages.addFirst(<font class="java-reserved_word"><strong>new</strong></font> Message(text));<br />
            <font class="java-reserved_word"><strong>while</strong></font> (messages.size() &gt; 10) <font class="java-bracket">{</font><br />
            messages.removeLast();<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>return</strong></font> messages;<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>private</strong></font> List&lt;Message&gt; getMessages() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> messages;<br />
            <font class="java-bracket">}</font><br />
            <br />
            <font class="java-reserved_word"><strong>protected</strong></font> <font class="java-reserved_word"><strong>void</strong></font> doPost(HttpServletRequest request, HttpServletResponse response) <font class="java-reserved_word"><strong>throws</strong></font> ServletException, IOException <font class="java-bracket">{</font><br />
            List&lt;Message&gt; list = <font class="java-reserved_word"><strong>null</strong></font>;<br />
            <br />
            <font class="java-reserved_word"><strong>if</strong></font>(<font class="java-string">"send"</font>.equals(request.getParameter(<font class="java-string">"task"</font>))) <font class="java-bracket">{</font><br />
            list = addMessage(request.getParameter(<font class="java-string">"msg"</font>));<br />
            <font class="java-bracket">}</font><br />
            <font class="java-reserved_word"><strong>else</strong></font> <font class="java-reserved_word"><strong>if</strong></font>(<font class="java-string">"query"</font>.equals(request.getParameter(<font class="java-string">"task"</font>)))<font class="java-bracket">{</font><br />
            list = getMessages();<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            PrintWriter out = response.getWriter();<br />
            response.setContentType(<font class="java-string">"text/xml"</font>);<br />
            response.setHeader(<font class="java-string">"Cache-Control"</font>, <font class="java-string">"no-cache"</font>);<br />
            &nbsp;<br />
            out.println(<font class="java-string">"&lt;response&gt;"</font>);<br />
            <font class="java-reserved_word"><strong>for</strong></font>(<font class="java-reserved_word"><strong>int</strong></font> i = 0; i &lt; list.size(); i++) <font class="java-bracket">{</font><br />
            String msg = list.get(i).getText();<br />
            out.println(<font class="java-string">"&lt;message&gt;"</font> + msg + <font class="java-string">"&lt;/message&gt;"</font>);<br />
            <font class="java-bracket">}</font><br />
            out.println(<font class="java-string">"&lt;/response&gt;"</font>);<br />
            <font class="java-bracket">}</font>             <br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
Message物件如下&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Message <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>private</strong></font> <font class="java-reserved_word"><strong>long</strong></font> id = System.currentTimeMillis();<br />
            <font class="java-reserved_word"><strong>private</strong></font> String text;<br />
            <br />
            <font class="java-reserved_word"><strong>public</strong></font> Message(String newtext) <font class="java-bracket">{</font><br />
            text = newtext;<br />
            <font class="java-reserved_word"><strong>if</strong></font> (text.length() &gt; 256) <font class="java-bracket">{</font><br />
            text = text.substring(0, 256);<br />
            <font class="java-bracket">}</font><br />
            text = text.replace(<font class="java-string">'&lt;'</font>, <font class="java-string">'['</font>);<br />
            text = text.replace(<font class="java-string">'&amp;'</font>, <font class="java-string">'_'</font>);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>long</strong></font> getId() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> id;<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> String getText() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> text;<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
Servlet接受訊息新增與查詢，判斷的方式是檢查請求參數task是send或query。 <br />
<br />
Servlet會以XML傳回目前List當中的訊息，客戶端可以查詢或插入新訊息時，取得目前List中的訊息，接著在web.xml中設定一下&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;web-app id=<font class="java-string">"WebApp_ID"</font> version=<font class="java-string">"2.4"</font> xmlns=<font class="java-string">"http://java.sun.com/xml/ns/j2ee"</font> xmlns:xsi=<font class="java-string">"http://www.w3.org/2001/XMLSchema-instance"</font> xsi:schemaLocation=<font class="java-string">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</font>&gt;<br />
            &lt;servlet&gt;<br />
            &lt;description&gt;<br />
            &lt;/description&gt;<br />
            &lt;display-name&gt;<br />
            ChatRoomServlet&lt;/display-name&gt;<br />
            &lt;servlet-name&gt;ChatRoomServlet&lt;/servlet-name&gt;<br />
            &lt;servlet-class&gt;<br />
            onlyfun.caterpillar.ChatRoomServlet&lt;/servlet-class&gt;<br />
            &lt;/servlet&gt;<br />
            &nbsp;<br />
            &lt;servlet-mapping&gt;<br />
            &lt;servlet-name&gt;ChatRoomServlet&lt;/servlet-name&gt;<br />
            &lt;url-pattern&gt;/ChatRoomServlet&lt;/url-pattern&gt;<br />
            &lt;/servlet-mapping&gt;<br />
            &lt;session-config&gt;<br />
            &lt;session-timeout&gt;<br />
            30<br />
            &lt;/session-timeout&gt;<br />
            &lt;/session-config&gt;  <br />
            &lt;/web-app&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
在網頁中，使用者可以在輸入訊息後按下按鈕送出資訊，並在XML回應取得時，將訊息以一列一列的表格方式顯示出來，另外還設定了週期性的輪詢，即使不輸入新訊息，也可以週期性的取得新的聊天訊息&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            31<br />
            32<br />
            33<br />
            34<br />
            35<br />
            36<br />
            37<br />
            38<br />
            39<br />
            40<br />
            41<br />
            42<br />
            43<br />
            44<br />
            45<br />
            46<br />
            47<br />
            48<br />
            49<br />
            50<br />
            51<br />
            52<br />
            53<br />
            54<br />
            55<br />
            56<br />
            57<br />
            58<br />
            59<br />
            60<br />
            61<br />
            62<br />
            63<br />
            64<br />
            65<br />
            66<br />
            67<br />
            68<br />
            69<br />
            70<br />
            71<br />
            72<br />
            73<br />
            74<br />
            75<br />
            76<br />
            77<br />
            78<br />
            79<br />
            80<br />
            81<br />
            82<br />
            83<br />
            84<br />
            85<br />
            86<br />
            87<br />
            88<br />
            89<br />
            90<br />
            91<br />
            92<br />
            93<br />
            94<br />
            95<br />
            96<br />
            97<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;title&gt;Chat Room&lt;/title&gt;<br />
            &nbsp;<br />
            &lt;script type=<font class="java-string">"text/javascript"</font>&gt;<br />
            var xmlHttp;<br />
            &nbsp;<br />
            function createXMLHttpRequest() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>if</strong></font> (window.ActiveXObject) <font class="java-bracket">{</font><br />
            xmlHttp = <font class="java-reserved_word"><strong>new</strong></font> ActiveXObject(<font class="java-string">"Microsoft.XMLHTTP"</font>);<br />
            <font class="java-bracket">}</font> <br />
            <font class="java-reserved_word"><strong>else</strong></font> <font class="java-reserved_word"><strong>if</strong></font> (window.XMLHttpRequest) <font class="java-bracket">{</font><br />
            xmlHttp = <font class="java-reserved_word"><strong>new</strong></font> XMLHttpRequest();<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function sendMessage() <font class="java-bracket">{</font><br />
            var msg = document.getElementById(<font class="java-string">"text"</font>).value;<br />
            <br />
            <font class="java-reserved_word"><strong>if</strong></font>(msg == <font class="java-string">""</font>) <font class="java-bracket">{</font><br />
            refreshMessage();<br />
            <font class="java-reserved_word"><strong>return</strong></font>;<br />
            <font class="java-bracket">}</font><br />
            <br />
            var param = <font class="java-string">"task=send&amp;msg="</font> + msg;<br />
            ajaxRequest(param);<br />
            document.getElementById(<font class="java-string">"text"</font>).value = <font class="java-string">""</font>;<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function queryMessage() <font class="java-bracket">{</font><br />
            var param = <font class="java-string">"task=query"</font>;<br />
            ajaxRequest(param);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function ajaxRequest(param) <font class="java-bracket">{</font><br />
            var url = <font class="java-string">"ChatRoomServlet?timestamp"</font> + <font class="java-reserved_word"><strong>new</strong></font> Date().getTime();<br />
            createXMLHttpRequest();<br />
            xmlHttp.onreadystatechange = refreshMessage;<br />
            xmlHttp.open(<font class="java-string">"POST"</font>, url, <font class="java-reserved_word"><strong>true</strong></font>);<br />
            xmlHttp.setRequestHeader(<font class="java-string">"Content-Type"</font>,<br />
            <font class="java-string">"application/x-www-form-urlencoded;"</font>);<br />
            xmlHttp.send(param);<br />
            <font class="java-bracket">}</font><br />
            <br />
            function refreshMessage() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>if</strong></font>(xmlHttp.readyState == 4) <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>if</strong></font>(xmlHttp.status == 200) <font class="java-bracket">{</font><br />
            var messages = xmlHttp.responseXML.getElementsByTagName(<font class="java-string">"message"</font>);<br />
            <br />
            var table_body = document.getElementById(<font class="java-string">"dynamicUpdateArea"</font>);<br />
            var length = table_body.childNodes.length;<br />
            <font class="java-reserved_word"><strong>for</strong></font> (var i = 0; i &lt; length; i++) <font class="java-bracket">{</font><br />
            table_body.removeChild(table_body.childNodes[0]);<br />
            <font class="java-bracket">}</font><br />
            <br />
            var length = messages.length;<br />
            <font class="java-reserved_word"><strong>for</strong></font>(var i = length - 1; i &gt;= 0 ; i--) <font class="java-bracket">{</font><br />
            var message = messages[i].firstChild.data;<br />
            var row = createRow(message);<br />
            <br />
            table_body.appendChild(row);                        <br />
            <font class="java-bracket">}</font><br />
            setTimeout(<font class="java-string">"queryMessage()"</font>, 2000);<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function createRow(message) <font class="java-bracket">{</font><br />
            var row = document.createElement(<font class="java-string">"tr"</font>);<br />
            var cell = document.createElement(<font class="java-string">"td"</font>);<br />
            var cell_data = document.createTextNode(message);<br />
            cell.appendChild(cell_data);<br />
            row.appendChild(cell);<br />
            <font class="java-reserved_word"><strong>return</strong></font> row;<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            &lt;/script&gt;<br />
            &nbsp;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            &nbsp;<br />
            &lt;p&gt;<br />
            Your Message:<br />
            &lt;input id=<font class="java-string">"text"</font>/&gt;<br />
            &lt;input type=<font class="java-string">"button"</font> value=<font class="java-string">"Send"</font><br />
            onclick=<font class="java-string">"sendMessage()"</font>/&gt;<br />
            &lt;/p&gt;<br />
            &nbsp;<br />
            &lt;p&gt;Messages:&lt;/p&gt;<br />
            &lt;table align=<font class="java-string">"left"</font>&gt;<br />
            &lt;tbody id=<font class="java-string">"dynamicUpdateArea"</font>&gt;&lt;/tbody&gt;<br />
            &lt;/table&gt;<br />
            &nbsp;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
簡單抓個畫面&#8230;&nbsp; </span><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/1.jpg" /><br />
<br />
<span class="javascript" id="text167681">直接用AJAX，後端用JSP/Servlet，您要對請求參數做些判斷，看看是新增訊息或查詢，並要自行輸出XML，有的沒的&#8230; <br />
<br />
改成DWR的話，就很簡單了，寫個簡單的Java物件&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.LinkedList;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.List;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Chat <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>private</strong></font> <font class="java-reserved_word"><strong>static</strong></font> LinkedList&lt;Message&gt; messages = <font class="java-reserved_word"><strong>new</strong></font> LinkedList&lt;Message&gt;();<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> List addMessage(String text) <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>if</strong></font> (text != <font class="java-reserved_word"><strong>null</strong></font> &amp;&amp; text.trim().length() &gt; 0) <font class="java-bracket">{</font><br />
            messages.addFirst(<font class="java-reserved_word"><strong>new</strong></font> Message(text));<br />
            <font class="java-reserved_word"><strong>while</strong></font> (messages.size() &gt; 10) <font class="java-bracket">{</font><br />
            messages.removeLast();<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font><br />
            <br />
            <font class="java-reserved_word"><strong>return</strong></font> messages;<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> List getMessages() <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> messages;<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
接著&#8230;在dwr.xml中開放一下&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;!DOCTYPE dwr PUBLIC <font class="java-string">"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</font> <font class="java-string">"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</font>&gt;<br />
            <br />
            &lt;dwr&gt;<br />
            &lt;allow&gt;<br />
            &nbsp;<br />
            &lt;create creator=<font class="java-string">"new"</font> javascript=<font class="java-string">"Chat"</font>&gt;<br />
            &lt;param name=<font class="java-string">"class"</font> value=<font class="java-string">"onlyfun.caterpillar.Chat"</font>/&gt;<br />
            &lt;/create&gt;<br />
            <br />
            &lt;convert converter=<font class="java-string">"bean"</font> match=<font class="java-string">"onlyfun.caterpillar.Message"</font>/&gt;      <br />
            &lt;/allow&gt;<br />
            &lt;/dwr&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
使用者取得訊息時，是直接傳回List物件，而List中裝的是Message物件，Message物件是自訂物件，conterver設定為 bean，表示DWR會自動將Message的getter名稱轉換為傳回客戶端的JavaScript物件中的屬性，例如Message中有 getText()，則在客戶端可以用message.text這樣的方式來存取。 <br />
<br />
接著是簡單的客戶端網頁&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            31<br />
            32<br />
            33<br />
            34<br />
            35<br />
            36<br />
            37<br />
            38<br />
            39<br />
            40<br />
            41<br />
            42<br />
            43<br />
            44<br />
            45<br />
            46<br />
            47<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;title&gt;Insert title here&lt;/title&gt;<br />
            &nbsp;<br />
            &lt;script src=<font class="java-string">"dwr/interface/Chat.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &lt;script src=<font class="java-string">"dwr/engine.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &lt;script src=<font class="java-string">"dwr/util.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &nbsp;<br />
            &lt;script type=<font class="java-string">"text/javascript"</font>&gt;<br />
            function sendMessage() <font class="java-bracket">{</font><br />
            var text = DWRUtil.getValue(<font class="java-string">"text"</font>);<br />
            DWRUtil.setValue(<font class="java-string">"text"</font>, <font class="java-string">""</font>);<br />
            Chat.addMessage(text, gotMessages);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function gotMessages(messages) <font class="java-bracket">{</font><br />
            var chatlog = <font class="java-string">""</font>;<br />
            <font class="java-reserved_word"><strong>for</strong></font> (var data in messages) <font class="java-bracket">{</font><br />
            chatlog = <font class="java-string">"&lt;div&gt;"</font> + messages[data].text +<br />
            <font class="java-string">"&lt;/div&gt;"</font> + chatlog;<br />
            <font class="java-bracket">}</font><br />
            DWRUtil.setValue(<font class="java-string">"chatlog"</font>, chatlog);<br />
            setTimeout(<font class="java-string">"queryMessage()"</font>, 2000);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function queryMessage() <font class="java-bracket">{</font><br />
            Chat.getMessages(gotMessages);<br />
            <font class="java-bracket">}</font><br />
            &lt;/script&gt;<br />
            &nbsp;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            &nbsp;<br />
            &lt;p&gt;<br />
            Your Message:<br />
            &lt;input id=<font class="java-string">"text"</font>/&gt;<br />
            &lt;input type=<font class="java-string">"button"</font> value=<font class="java-string">"Send"</font><br />
            onclick=<font class="java-string">"sendMessage()"</font>/&gt;<br />
            &lt;/p&gt;<br />
            &nbsp;<br />
            &lt;p&gt;Messages:&lt;/p&gt;<br />
            &lt;div id=<font class="java-string">"chatlog"</font>&gt;&lt;/div&gt;<br />
            &nbsp;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
當List物件傳回時，它成為gotMessages(messages)中的messages物件，而messages物件中包括 Message物件轉換後對應的JavaScript物件，由於我們已經設定了Converter，所以可以用messages[data].text來 取得傳回的訊息&#8230; <br />
<br />
簡單抓個畫面&#8230; </span><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/2.jpg" /><br />
<br />
<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1311605</p>
<img src ="http://www.blogjava.net/libin2722/aggbug/190766.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-04-04 11:37 <a href="http://www.blogjava.net/libin2722/articles/190766.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR 入門與應用（二）</title><link>http://www.blogjava.net/libin2722/articles/190765.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 04 Apr 2008 03:35:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/190765.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/190765.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/190765.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/190765.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/190765.html</trackback:ping><description><![CDATA[<span class="javascript" id="text166425">假設您要從資料庫中查詢出一些字串，然後填寫到表單的下拉選單中。 <br />
<br />
例如一個示意的Java程式如下： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Option <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>public</strong></font> String[] getOptions() <font class="java-bracket">{</font><br />
            <font class="java-comment">// 實際上這些字串是從資料庫中查到的啦&#8230;</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"良葛格"</font>, <font class="java-string">"毛美眉"</font>, <font class="java-string">"米小狗"</font><font class="java-bracket">}</font>; <br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
傳回的字串陣列，您要填寫到下拉選單中，當然，首先我們要在dwr.xml中開發這個物件&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;!DOCTYPE dwr PUBLIC <font class="java-string">"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</font> <font class="java-string">"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</font>&gt;<br />
            <br />
            &lt;dwr&gt;<br />
            &lt;allow&gt;<br />
            &lt;create creator=<font class="java-string">"new"</font> javascript=<font class="java-string">"OPT"</font>&gt;<br />
            &lt;param name=<font class="java-string">"class"</font> value=<font class="java-string">"onlyfun.caterpillar.Option"</font>/&gt;<br />
            &lt;/create&gt;  <br />
            &lt;/allow&gt;<br />
            &lt;/dwr&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
這是我們的網頁&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;script src=<font class="java-string">"option.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &lt;script src=<font class="java-string">"dwr/interface/OPT.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &lt;script src=<font class="java-string">"dwr/engine.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &lt;script src=<font class="java-string">"dwr/util.js"</font> type=<font class="java-string">"text/javascript"</font>&gt;&lt;/script&gt;<br />
            &nbsp;<br />
            &lt;/head&gt;<br />
            &nbsp;<br />
            &lt;body&gt;<br />
            選項: &lt;select id=<font class="java-string">"opts"</font>&gt;&lt;/select&gt;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
傳回的字串陣列會填入opts這個select中，我們的option.js如下&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>window.onload = function() <font class="java-bracket">{</font><br />
            OPT.getOptions(populate);  <br />
            <font class="java-bracket">}</font>;<br />
            &nbsp;<br />
            function populate(list)<font class="java-bracket">{</font><br />
            DWRUtil.removeAllOptions(<font class="java-string">"opts"</font>);<br />
            DWRUtil.addOptions(<font class="java-string">"opts"</font>, list);<br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
夠簡單了&#8230;不需要解釋了&#8230; <br />
<br />
看一下結果&#8230;&nbsp; </span><br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/88753484.jpg" /><br />
<br />
<span class="javascript" id="text166427">好啦！我知道有人在說了，這個程式有夠無聊&#8230;<img alt="Dead" src="http://www.javaworld.com.tw/jute/images/smiles/smile_dead.gif" width="15" /> <br />
<br />
改一下！就是個不錯的範例了，例如連動方塊，唔！在Ajax in action中叫啥？Dynamic double combo？&#8230; <br />
<br />
假設一個會去從資料庫中查詢資料的Java程式示意如下： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.Map;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.TreeMap;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Bike <font class="java-bracket">{</font><br />
            &nbsp;&nbsp;<font class="java-reserved_word"><strong>private</strong></font> Map&lt;String, String[]&gt; bikes;<br />
            &nbsp;&nbsp;<br />
            &nbsp;&nbsp;<font class="java-reserved_word"><strong>public</strong></font> Bike() <font class="java-bracket">{</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes = <font class="java-reserved_word"><strong>new</strong></font> TreeMap&lt;String, String[]&gt;();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes.put(<font class="java-string">"2000"</font>, <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"2000 T1"</font>, <font class="java-string">"2000 T2"</font>, <font class="java-string">"2000 T3"</font><font class="java-bracket">}</font>);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes.put(<font class="java-string">"2001"</font>, <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"2001 A1"</font>, <font class="java-string">"2001 A2"</font><font class="java-bracket">}</font>);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes.put(<font class="java-string">"2002"</font>, <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"2002 BW1"</font>, <font class="java-string">"2002 BW2"</font>, <font class="java-string">"2002 BW"</font><font class="java-bracket">}</font>);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes.put(<font class="java-string">"2003"</font>, <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"2003 S320"</font><font class="java-bracket">}</font>);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;bikes.put(<font class="java-string">"2004"</font>, <font class="java-reserved_word"><strong>new</strong></font> String[] <font class="java-bracket">{</font><font class="java-string">"2004 TA1"</font>, <font class="java-string">"2004 TA2"</font>, <font class="java-string">"2004 TA3"</font><font class="java-bracket">}</font>);<br />
            &nbsp;&nbsp;<font class="java-bracket">}</font><br />
            &nbsp;&nbsp;<br />
            &nbsp;&nbsp;<font class="java-reserved_word"><strong>public</strong></font> String[] getYears() <font class="java-bracket">{</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;String[] keys = <font class="java-reserved_word"><strong>new</strong></font> String[bikes.size()];<br />
            &nbsp;&nbsp;&nbsp;&nbsp;<font class="java-reserved_word"><strong>int</strong></font> i = 0;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;<font class="java-reserved_word"><strong>for</strong></font>(String key : bikes.keySet()) <font class="java-bracket">{</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;keys[i++] = key;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;<font class="java-bracket">}</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<font class="java-reserved_word"><strong>return</strong></font> keys; <br />
            &nbsp;&nbsp;<font class="java-bracket">}</font><br />
            &nbsp;&nbsp;<br />
            &nbsp;&nbsp;<font class="java-reserved_word"><strong>public</strong></font> String[] getBikes(String year) <font class="java-bracket">{</font><br />
            &nbsp;&nbsp;&nbsp;&nbsp;<font class="java-reserved_word"><strong>return</strong></font> bikes.get(year);<br />
            &nbsp;&nbsp;<font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
getYears()跟getBkies()分別表示產品的年份跟型號，這邊用Map模擬，實際上資料是來自資料庫的查詢。 <br />
<br />
一樣的，在dwr.xml中設定： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;!DOCTYPE dwr PUBLIC <font class="java-string">"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</font> <font class="java-string">"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</font>&gt;<br />
            <br />
            &lt;dwr&gt;<br />
            &lt;allow&gt;<br />
            &lt;create creator=<font class="java-string">"new"</font> javascript=<font class="java-string">"Bike"</font> scope=<font class="java-string">"application"</font>&gt;<br />
            &lt;param name=<font class="java-string">"class"</font> value=<font class="java-string">"onlyfun.caterpillar.Bike"</font>/&gt;<br />
            &lt;/create&gt;<br />
            &lt;/allow&gt;<br />
            &lt;/dwr&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
我們會有個腳踏車年份與型號查詢頁面： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;title&gt;Insert title here&lt;/title&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/interface/Bike.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/engine.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/util.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'bike.js'</font>&gt;&lt;/script&gt;<br />
            &lt;/head&gt;<br />
            &lt;body onload=<font class="java-string">"refreshYearList();"</font>&gt;<br />
            &nbsp;&nbsp;年份：&lt;select id=<font class="java-string">"years"</font> onchange=<font class="java-string">"refreshBikeList();"</font>&gt;&lt;/select&gt;&lt;br/&gt;&lt;br/&gt;<br />
            &nbsp;&nbsp;型號：&lt;select id=<font class="java-string">"bikes"</font>&gt;&lt;/select&gt;&lt;br/&gt;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
注意，在選完第一個年份後，會觸發onchange事件，接著第二個下拉選單會自動填上對應年份的型號，而不是按鈕按下，再去取得第二個下拉選單，然後refresh...blah...blah... <br />
<br />
bike.js如下&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>function refreshYearList() <font class="java-bracket">{</font><br />
            Bike.getYears(populateYearList);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function populateYearList(list)<font class="java-bracket">{</font><br />
            DWRUtil.removeAllOptions(<font class="java-string">"years"</font>);<br />
            DWRUtil.addOptions(<font class="java-string">"years"</font>, list);<br />
            refreshBikeList();<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function refreshBikeList() <font class="java-bracket">{</font><br />
            var year = $(<font class="java-string">"years"</font>).value;<br />
            Bike.getBikes(year, populateBikeList);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function populateBikeList(list)<font class="java-bracket">{</font><br />
            DWRUtil.removeAllOptions(<font class="java-string">"bikes"</font>);<br />
            DWRUtil.addOptions(<font class="java-string">"bikes"</font>, list);<br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
一樣很簡單&#8230; <br />
<br />
看個無聊的畫面&#8230;XD </span><br />
<br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/42270937.jpg" /><br />
<br />
<img src ="http://www.blogjava.net/libin2722/aggbug/190765.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-04-04 11:35 <a href="http://www.blogjava.net/libin2722/articles/190765.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>DWR 入門與應用（一） </title><link>http://www.blogjava.net/libin2722/articles/190764.html</link><dc:creator>礼物</dc:creator><author>礼物</author><pubDate>Fri, 04 Apr 2008 03:34:00 GMT</pubDate><guid>http://www.blogjava.net/libin2722/articles/190764.html</guid><wfw:comment>http://www.blogjava.net/libin2722/comments/190764.html</wfw:comment><comments>http://www.blogjava.net/libin2722/articles/190764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/libin2722/comments/commentRss/190764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/libin2722/services/trackbacks/190764.html</trackback:ping><description><![CDATA[請先到 <a class="ilink" href="http://getahead.ltd.uk/dwr/" target="_blank">http://getahead.ltd.uk/dwr/</a> 下載 dwr.jar，放到WEB-INF/lib下&#8230; <br />
<br />
負責處理客戶端請求，並呼叫Java物件的是DWRServlet，DWR其實也有些Model 2的味道，只是View的這一層比較弱，因為放到客戶端的JavaScript應用程式中&#8230; <br />
<br />
在web.xml中加入DWRServlet&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;web-app id=<font class="java-string">"WebApp_ID"</font> version=<font class="java-string">"2.4"</font> <br />
            xmlns=<font class="java-string">"http://java.sun.com/xml/ns/j2ee"</font> <br />
            xmlns:xsi=<font class="java-string">"http://www.w3.org/2001/XMLSchema-instance"</font> <br />
            xsi:schemaLocation=<br />
            <font class="java-string">"http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"</font>&gt;<br />
            &lt;display-name&gt;<br />
            ajaxDWR&lt;/display-name&gt;<br />
            &lt;servlet&gt;<br />
            &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />
            &lt;servlet-class&gt;uk.ltd.getahead.dwr.DWRServlet&lt;/servlet-class&gt;<br />
            &lt;init-param&gt;<br />
            &lt;description&gt;<br />
            &lt;/description&gt;<br />
            &lt;param-name&gt;debug&lt;/param-name&gt;<br />
            &lt;param-value&gt;true&lt;/param-value&gt;<br />
            &lt;/init-param&gt;<br />
            &lt;/servlet&gt;<br />
            &lt;servlet-mapping&gt;<br />
            &lt;servlet-name&gt;dwr-invoker&lt;/servlet-name&gt;<br />
            &lt;url-pattern&gt;/dwr<font class="java-comment">/*&lt;/url-pattern&gt;<br />
            &lt;/servlet-mapping&gt;<br />
            &lt;/web-app&gt;<br />
            </font></pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
接下來寫個簡單的Hello吧！ <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Hello <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>public</strong></font> String hello(String name) <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> <font class="java-string">"哈囉！"</font> + name + <font class="java-string">"！您的第一個DWR！"</font>;<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
客戶端要呼叫這個Java物件，傳給它參數，而後傳回一個字串，客戶端再顯示這個字串，神奇？其實是要告訴DWRServlet這件事，這需要一個dwr.xml： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;!DOCTYPE dwr PUBLIC <font class="java-string">"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</font><br />
            <font class="java-string">"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</font>&gt;<br />
            <br />
            &lt;dwr&gt;<br />
            &lt;allow&gt;<br />
            &lt;create creator=<font class="java-string">"new"</font> javascript=<font class="java-string">"Hello"</font>&gt;<br />
            &lt;param name=<font class="java-string">"class"</font> value=<font class="java-string">"onlyfun.caterpillar.Hello"</font> /&gt;<br />
            &lt;/create&gt;<br />
            &lt;/allow&gt;<br />
            &lt;/dwr&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
creator設定為new，表示使用Hello的無參數建構子來生成物件，javascript設定為Hello，表示客戶端JavaScript程式可以使用Hello來呼叫對應的onlyfun.caterpillar.Hello物件。 <br />
<br />
來寫個客戶端的網頁，當中有一個輸入欄位&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;title&gt;第一個DWR程式&lt;/title&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/interface/Hello.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/engine.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/util.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'hello.js'</font>&gt;&lt;/script&gt;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            &nbsp;<br />
            &lt;input id=<font class="java-string">"user"</font> type=<font class="java-string">"text"</font> /&gt;<br />
            &lt;input type=<font class="java-string">'button'</font> value=<font class="java-string">'哈囉'</font> onclick=<font class="java-string">'hello();'</font> /&gt; <br />
            &nbsp;<br />
            &lt;div id=<font class="java-string">"result"</font>&gt;&lt;/div&gt;<br />
            &nbsp;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
dwr/interface/Hello.js是由DWRServlet根據dwr.xml中的設定生成的，engine.js負責客戶端伺服端溝通，util.js是一些好用的JavaScript程式，可以讓您少寫很多JavaScript。 <br />
<br />
hello.js是我們自訂的函式，按下按鈕後，會呼叫當中的hello()函式： <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>function hello() <font class="java-bracket">{</font><br />
            var user = $(<font class="java-string">'user'</font>).value;<br />
            Hello.hello(user, callback);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function callback(msg) <font class="java-bracket">{</font><br />
            DWRUtil.setValue(<font class="java-string">'result'</font>, msg);<br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
${'user'}取得輸入欄位的DOM物件，value取得當中的欄位值，而後呼叫Hello.hello()，並將value當作參數傳送&#8230; 結果是呼叫Server端的Hello Java物件，當結果傳回後，會呼叫JavaScript的callback函式，DWRUtil的setValue()方法會將傳回的msg設定給指定 id的DOM，結果就是&#8230;啥！AJAX的功能在哪&#8230;就這個而言就是發出非同步請求，而回應不用Refresh頁面啦！&nbsp; <br />
<img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/caterpillar_here/helloDWR.jpg" /><br />
<br />
<span class="javascript" id="text165882">好啦！這個無聊的Hello DWR可以做啥！&#8230;XD <br />
<br />
已經可以讓您做個簡單的文字提示功能了&#8230;像這個&#8230; <br />
<a class="ilink" href="http://caterpillar.onlyfun.net/Gossip/index.html" target="_blank">http://caterpillar.onlyfun.net/Gossip/index.html</a> <br />
<br />
把滑鼠指到書的照片上，會顯示提示文字，這些提示文字本身不是存在網頁上的，而是在Server端，當滑鼠指到書上時，會用Request object去抓，然後顯示在框框中&#8230; <br />
<br />
當然！我的網站只支援PHP，所以那不是DWR完成的功能，而且我是直接用Request object跟DOM去慢慢刻的&#8230;對初學者來說已經有些麻煩了&#8230;XD <br />
<br />
不過！用DWR就可以很簡單完成這個功能&#8230; <br />
<br />
先寫個Java類別吧！會抓properties檔案中的文字訊息，例如&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre><font class="java-reserved_word"><strong>package</strong></font> onlyfun.caterpillar;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>import</strong></font> java.util.ResourceBundle;<br />
            &nbsp;<br />
            <font class="java-reserved_word"><strong>public</strong></font> <font class="java-reserved_word"><strong>class</strong></font> Book <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>private</strong></font> ResourceBundle resource;<br />
            <br />
            <font class="java-reserved_word"><strong>public</strong></font> Book() <font class="java-bracket">{</font><br />
            resource = ResourceBundle.getBundle(<font class="java-string">"book"</font>); <br />
            <font class="java-bracket">}</font><br />
            <br />
            <font class="java-reserved_word"><strong>public</strong></font> String getDescription(String key) <font class="java-bracket">{</font><br />
            <font class="java-reserved_word"><strong>return</strong></font> resource.getString(key);<br />
            <font class="java-bracket">}</font><br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
從程式中就知道，它會去抓book_zh_TW.properties的資料，這不是重點啦！只是Java的一個功能，我們要看的是DWR，不過先把book_zh_TW.properties準備好&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>java=Java 學習筆記的介紹 &#8230; BlaBla...<br />
            spring=Spring 技術手冊的介紹&#8230;BlaBla...<br />
            ajax=Ajax in action 中文版的介紹&#8230;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
唔！裏頭是中文字，自己用native2ascii轉換吧&#8230;這也不是重點&#8230;我們是要看DWR怎麼做到文字提示功能&#8230; <br />
<br />
一樣的&#8230;要開放這個Book物件，在dwr.xml中&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;?xml version=<font class="java-string">"1.0"</font> encoding=<font class="java-string">"UTF-8"</font>?&gt;<br />
            &lt;!DOCTYPE dwr PUBLIC <font class="java-string">"-//GetAhead Limited//DTD Direct Web Remoting 1.0//EN"</font> <br />
            <font class="java-string">"http://www.getahead.ltd.uk/dwr/dwr10.dtd"</font>&gt;<br />
            <br />
            &lt;dwr&gt;<br />
            &lt;allow&gt;<br />
            &lt;create creator=<font class="java-string">"new"</font> javascript=<font class="java-string">"Book"</font> scope=<font class="java-string">"application"</font>&gt;<br />
            &lt;param name=<font class="java-string">"class"</font> value=<font class="java-string">"onlyfun.caterpillar.Book"</font>/&gt;<br />
            &lt;/create&gt;  <br />
            &lt;/allow&gt;<br />
            &lt;/dwr&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
scope設定為application，表示這個Book物件在整個應用程式階段都活著。 <br />
<br />
然後，客戶端寫個網頁&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            12<br />
            13<br />
            14<br />
            15<br />
            16<br />
            17<br />
            18<br />
            19<br />
            20<br />
            21<br />
            22<br />
            23<br />
            24<br />
            25<br />
            26<br />
            27<br />
            28<br />
            29<br />
            30<br />
            31<br />
            32<br />
            33<br />
            34<br />
            35<br />
            36<br />
            37<br />
            38<br />
            39<br />
            40<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>&lt;!DOCTYPE HTML PUBLIC <font class="java-string">"-//W3C//DTD HTML 4.01 Transitional//EN"</font>&gt;<br />
            &lt;html&gt;<br />
            &lt;head&gt;<br />
            &lt;meta http-equiv=<font class="java-string">"Content-Type"</font> content=<font class="java-string">"text/html; charset=BIG5"</font>&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/interface/Book.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/engine.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'dwr/util.js'</font>&gt;&lt;/script&gt;<br />
            &lt;script type=<font class="java-string">'text/javascript'</font> src=<font class="java-string">'book.js'</font>&gt;&lt;/script&gt;<br />
            &lt;title&gt;個人著／譯作&lt;/title&gt;<br />
            &lt;/head&gt;<br />
            &lt;body&gt;<br />
            &nbsp;<br />
            &lt;div id=<font class="java-string">"ajax"</font> onmouseover=<font class="java-string">"getBookData(this);"</font><br />
            onmouseout=<font class="java-string">"clearData();"</font>&gt;&lt;a<br />
            href=<font class="java-string">"http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&amp;bn=AXP011800"</font>&gt;&lt;small&gt;&lt;img<br />
            style=<font class="java-string">"border: 0px solid ; width: 80px; height: 110px; float: left;"</font><br />
            alt=<font class="java-string">"Ajax in action 中文版"</font> title=<font class="java-string">"Ajax in action 中文版"</font><br />
            src=<font class="java-string">"images/ajax_in_action_c.jpg"</font> hspace=<font class="java-string">"10"</font> vspace=<font class="java-string">"2"</font>&gt;&lt;/small&gt;&lt;/a&gt;&lt;/div&gt;<br />
            &nbsp;<br />
            &lt;div id=<font class="java-string">"spring"</font> onmouseover=<font class="java-string">"getBookData(this);"</font><br />
            onmouseout=<font class="java-string">"clearData();"</font>&gt;&lt;a<br />
            href=<font class="java-string">"http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&amp;bn=ACL021000"</font>&gt;&lt;small&gt;&lt;img<br />
            style=<font class="java-string">"border: 0px solid ; width: 80px; height: 110px; float: left;"</font><br />
            alt=<font class="java-string">"Spring 技術手冊"</font> title=<font class="java-string">"Spring 技術手冊"</font><br />
            src=<font class="java-string">"images/SpringTech_S.jpg"</font> hspace=<font class="java-string">"10"</font> vspace=<font class="java-string">"2"</font>&gt;&lt;/small&gt;&lt;/a&gt;&lt;/div&gt;<br />
            &nbsp;<br />
            &lt;div id=<font class="java-string">"java"</font> onmouseover=<font class="java-string">"getBookData(this);"</font><br />
            onmouseout=<font class="java-string">"clearData();"</font>&gt;&lt;a<br />
            href=<font class="java-string">"http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&amp;bn=ACL020931"</font>&gt;&lt;small&gt;&lt;img<br />
            style=<font class="java-string">"border: 0px solid ; width: 80px; height: 110px; float: left;"</font><br />
            alt=<font class="java-string">"Java 學習筆記"</font> title=<font class="java-string">"Java 學習筆記"</font><br />
            src=<font class="java-string">"images/JavaGossip_Cover_Small.jpg"</font> hspace=<font class="java-string">"10"</font><br />
            vspace=<font class="java-string">"2"</font>&gt;&lt;/small&gt;&lt;/a&gt;&lt;/div&gt;<br />
            <br />
            &lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;<br />
            <br />
            &lt;div id=<font class="java-string">"info"</font>&gt;&lt;/div&gt;<br />
            &nbsp;<br />
            &lt;/body&gt;<br />
            &lt;/html&gt;<br />
            </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
重點在於onmouseover跟onmouseout，滑鼠移入與移出時會呼叫的函式，還有最下面的info，抓回來的書籍介紹會放到當中&#8230; <br />
<br />
book.js如下，簡單的很&#8230; <br />
<table class="java" cellspacing="1" cellpadding="3" bgcolor="#999999" border="0">
    <tbody>
        <tr>
            <td valign="top" align="left" width="1" bgcolor="#dddddd">
            <pre><font color="#555555">1<br />
            2<br />
            3<br />
            4<br />
            5<br />
            6<br />
            7<br />
            8<br />
            9<br />
            10<br />
            11<br />
            </font></pre>
            </td>
            <td valign="top" align="left" bgcolor="#ffffff">
            <pre>function getBookData(ele) <font class="java-bracket">{</font><br />
            Book.getDescription(ele.id, setBookData);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function setBookData(description) <font class="java-bracket">{</font><br />
            DWRUtil.setValue(<font class="java-string">'info'</font>, description);<br />
            <font class="java-bracket">}</font><br />
            &nbsp;<br />
            function clearData() <font class="java-bracket">{</font><br />
            DWRUtil.setValue(<font class="java-string">'info'</font>, <font class="java-string">''</font>);<br />
            <font class="java-bracket">}</font> </pre>
            </td>
        </tr>
    </tbody>
</table>
<br />
<br />
程式很簡單，我懶得解釋了&#8230;XD <br />
<br />
看一下畫面好了&#8230;這是滑鼠移到 <a href="http://www.gotop.com.tw/waweb2004/home/home.aspx?pg=HM010X&amp;bn=AXP011800"><font color="#ff0000">Ajax in action中文版</font></a> 上的介紹畫面&#8230; </span><br />
<img src ="http://www.blogjava.net/libin2722/aggbug/190764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/libin2722/" target="_blank">礼物</a> 2008-04-04 11:34 <a href="http://www.blogjava.net/libin2722/articles/190764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>