⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 毕设的翻译 -- 使用direct web remoting的ajax - 学习历程 - 独败.htm

📁 几个运用了DWR框架编写的AJAX代码,
💻 HTM
📖 第 1 页 / 共 5 页
字号:
                                expression from the search field</DIV>
                                <DIV align=left>&nbsp; var searchexp = 
                                $("searchbox").value;</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp; // Call remoted DAO 
                                method, and specify callback function</DIV>
                                <DIV align=left>&nbsp; 
                                catalog.findItems(searchexp, 
displayItems);</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp; // Return false to 
                                suppress form submission</DIV>
                                <DIV align=left>&nbsp; return false;</DIV>
                                <DIV align=left>}</DIV>
                                <DIV 
                                align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                                </DIV>
                                <DIV align=left>/*</DIV>
                                <DIV align=left>&nbsp;* Displays a list of 
                                catalog items</DIV>
                                <DIV align=left>&nbsp;*/</DIV>
                                <DIV align=left>function displayItems(items) 
                                {</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp; // Remove the currently 
                                displayed search results</DIV>
                                <DIV align=left>&nbsp; 
                                DWRUtil.removeAllRows("items");</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp; if (items.length == 0) 
                                {</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; alert("No 
                                matching products found");</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; 
                                $("catalog").style.visibility = "hidden";</DIV>
                                <DIV align=left>&nbsp; } else {</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; 
                                DWRUtil.addRows("items",items,cellFunctions);</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; 
                                $("catalog").style.visibility = "visible";</DIV>
                                <DIV align=left>&nbsp; }</DIV>
                                <DIV align=left>}</DIV></TD></TR></TBODY></TABLE>
                              <DIV>&nbsp;</DIV>
                              <DIV>在上面的searchFormSubmitHandler()函数中,有意思的代码显然是catalog.findItems(searchexp, 
                              displayItems);。这一行代码就是所有用来发送XMLHttpRequest给DWR 
                              servlet并在远程对象的响应中调用displayItems()函数的代码了。</DIV>
                              <DIV>displayItems()回调函数被调用时有个Item数组参数。这个数组跟放置物品的表格ID和一组函数一起被传给DWRUtil.addRows()函数。在这个数组中的函数数量跟表格中每行的单元数量一样。每个函数都和数组中的Item一起轮流被调用,返回相应的单元格中要填充的内容。</DIV>
                              <DIV>在这个例子中,我让表格中关于物品的每行都要显示物品的名字、描述和价格,在最后一列还有一个<B>Add 
                              to Cart</B>按钮。列表4显示了实现这个功能的单元函数数组:</DIV>
                              <DIV><A name=listing4><B>列表</B></A><B> 4.</B><B> 
                              </B><B>放置</B><B>item</B><B>表格的单元函数数组</B><B></B></DIV>
                              <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                              border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>/*</DIV>
                                <DIV align=left>&nbsp;* Array of functions to 
                                populate a row of the items table</DIV>
                                <DIV align=left>&nbsp;* using DWRUtil's addRows 
                                function</DIV>
                                <DIV align=left>&nbsp;*/</DIV>
                                <DIV align=left>var cellFunctions = [</DIV>
                                <DIV align=left>&nbsp; function(item) { return 
                                item.name; },</DIV>
                                <DIV align=left>&nbsp; function(item) { return 
                                item.description; },</DIV>
                                <DIV align=left>&nbsp; function(item) { return 
                                item.formattedPrice; },</DIV>
                                <DIV align=left>&nbsp; function(item) {</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; var btn = 
                                document.createElement("button");</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; btn.innerHTML 
                                = "Add to cart";</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; btn.itemId = 
                                item.id;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; btn.onclick = 
                                addToCartButtonHandler;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; return 
                                btn;</DIV>
                                <DIV align=left>&nbsp; }</DIV>
                                <DIV align=left>];</DIV></TD></TR></TBODY></TABLE>
                              <DIV>&nbsp;</DIV>
                              <DIV>前三个函数简单地返回dwr.xml中的Item的convertor说明的成员。最后的一个函数创建了一个按钮,把Item的ID赋值给它,并说明了当按钮被点击时需要调用一个叫addToCartButtonHandler的函数。这个函数是第二个用例的入口:将一个物品加入到购物车中。</DIV>
                              <DIV><FONT face=Arial size=3></FONT>&nbsp;</DIV>
                              <DIV><B>实现购物车</B></DIV>
                              <TABLE cellSpacing=0 cellPadding=0 align=left 
                              border=1>
                                <TBODY>
                                <TR>
                                <TD width="100%">
                                <DIV align=left><B>DWR</B><B>的安全性</B></DIV>
                                <DIV 
                                align=left>DWR在设计时就考虑了安全问题。在dwr.xml中只把把想暴露给远程的类和方法加入到白名单中,这样避免了不经意地暴露可能被策划用来攻击的功能。另外,在调试测试模式下,很容易就能审核暴露给Web的所有类和方法。</DIV>
                                <DIV align=left>DWR还支持基于角色的安全机制。通过bean的 
                                creator配置,可以指定只有某个J2EE角色才能访问这个bean。通过部署多个安全DWR 
                                Servlet实例的多个URL(每个Servlet都有自己的dwr.xml配置文件),你可以定义有不同远程功能调用的用户集合。</DIV></TD></TR></TBODY></TABLE>
                              <DIV><FONT face=Arial></FONT>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV>用户的购物车的Java表示是基于一个映射的。当一个物品加到车中时,物品就被插入到映射中作为关键字。映射中有个相应的整型值表示车中物品的数量。因此Cart.java有个成员被声明为Map&lt;Item,Integer&gt;。</DIV>
                              <DIV>&nbsp;&nbsp;&nbsp; 
                              使用复杂类型当作杂凑关键字给DWR提了一个难题——在Javascript中,数组的索引必须是直接量。于是,内容映射不能被DWR转化成它自己的样子。但不管怎样,为了完成购物车的用户界面。用户需要看到的所有东西只是车中物品的名字和数量。所以给Cart加一个方法叫getSimpleContents(),它接受内容映射,按照它建立一个简单的映射&lt;String,Integer&gt;,仅仅表示每个物品的名字和数量。这个字符串索引的映射表示能很容易地被DWR的内建转换器转成Javascript。</DIV>
                              <DIV>Cart的另一个客户关心的字段是总价格totalPrice,表示购物车中所有物品的价格总和。跟物品Item在一起,我提供了一个合成的成员formattedTotalPrice,它是一个预定义了格式的字符串,表示数字总和。</DIV>
                              <DIV>&nbsp;</DIV>
                              <DIV align=right>&nbsp;</DIV>
                              <DIV align=right>&nbsp;</DIV>
                              <DIV align=right>&nbsp;</DIV>
                              <DIV><B>购物车的转化</B></DIV>
                              <DIV>对于在客户端使用两个Cart的调用(一个用来得到内容,一个用来得到总价格),我更想一次就把所有数据都送到客户端。为了达到这个目的,我加了一个看上去很奇怪的方法,如下面列表5显示的:</DIV>
                              <DIV><A name=listing5><B>列表</B></A><B> 5. 
                              Cart.getCart() </B><B>方法</B><B></B></DIV>
                              <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                              border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>/**</DIV>
                                <DIV align=left>&nbsp;* Returns the cart itself 
                                - for DWR</DIV>
                                <DIV align=left>&nbsp;* @return the cart</DIV>
                                <DIV align=left>&nbsp;*/ </DIV>
                                <DIV align=left>public Cart getCart() {</DIV>
                                <DIV align=left>&nbsp; return this;</DIV>
                                <DIV align=left>}</DIV></TD></TR></TBODY></TABLE>
                              <DIV>&nbsp;</DIV>
                              <DIV>在普通的Java代码中这个方法是完全多余的(因为你调用这个方法的时候你已经有一个Cart的引用了)。这个方法使得DWR客户可以把Cart它自己序列化为JavaScript。</DIV>
                              <DIV>除getCart()以外,另一个需要远程调用的方法是addItemToCart()。这个方法有一个字符串参数表示物品的ID,它把物品加到购物车中,更新总价格。这个方法也返回Cart,以便客户端代码可以更新车的内容并在一个操作中得到它的新状态。</DIV>
                              <DIV>&nbsp;&nbsp;&nbsp; 
                              列表6是扩展的dwr.xml配置文件,它包括关于远程类Cart的额外配置:</DIV>
                              <DIV><A name=listing6><B>列表</B></A><B> 6. 
                              </B><B>修改过的包含了</B><B>Cart</B><B>类的</B><B> dwr.xml 
                              </B><B></B></DIV>
                              <TABLE cellSpacing=0 cellPadding=0 width="100%" 
                              border=1>
                                <TBODY>
                                <TR>
                                <TD>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&nbsp;</DIV>
                                <DIV align=left>&lt;!DOCTYPE dwr PUBLIC</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; "-//GetAhead 
                                Limited//DTD Direct Web Remoting 1.0//EN"</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; 
                                "http://www.getahead.ltd.uk/dwr/dwr10.dtd"&gt;</DIV>
                                <DIV align=left>&lt;dwr&gt;</DIV>
                                <DIV align=left>&nbsp; &lt;/allow&gt;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp; &lt;/create 
                                creator="new" javascript="catalog"&gt;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                                &lt;/param name="class" </DIV>
                                <DIV 
                                align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                                value="developerworks.ajax.store.CatalogDAO"/&gt;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
                                &lt;/include method="getItem"/&gt;</DIV>
                                <DIV align=left>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -