`
furonglang
  • 浏览: 5066 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

DWR下拉框联动

    博客分类:
  • ajax
阅读更多
    找了很多资料 解决了无数异常 然后这是我的成果 dwr新手哈
   在appfuse2.0m5 struts basic基础之上
   最基础的两个POJO:
 
Game:游戏
java 代码
 
  1. @Entity  
  2. @Table(name = "JGAME")  
  3. public class Game extends BaseObject {  
  4.   
  5.     @Id  
  6.     @GeneratedValue(strategy = GenerationType.AUTO)  
  7.     private Long id;  
  8.   
  9.     @OneToMany(  
  10.             mappedBy = "game",  
  11.             cascade = {CascadeType.REMOVE,CascadeType.MERGE},  
  12.             fetch = FetchType.LAZY  
  13.     )  
  14.     private List<gameserver></gameserver> gameServers = new ArrayList<gameserver></gameserver>();  
  15.   
  16.     private String gameName;  
  17.   
  18.     @Column(nullable = false)  
  19.     private Integer gameLevel;  
  20.   
  21.     private String l1Name;  
  22.     private String l2Name;  
  23.     private String l3Name;  
  24.   
  25.     //getter and setter  
  26.     ...  
  27. }  


GameServer:游戏服务器

java 代码
  1. @Entity  
  2. @Table(name = "JGAMESERVER")   
  3. public class GameServer extends BaseObject {   
  4.   
  5.     @Id  
  6.     @GeneratedValue(strategy = GenerationType.AUTO)   
  7.     private Long id;   
  8.   
  9.     @ManyToOne  
  10.     @JoinColumn(name = "GAME_ID",nullable = false)   
  11.     private Game game;   
  12.   
  13.     private String level1;   
  14.     private String level2;   
  15.     private String level3;   
  16.     //getter and setter
  17.     ... 
  18. }  

GameService接口:

java 代码
  1. @WebService  
  2. public interface GameService {   
  3.   
  4.     /**
  5.      * 根据游戏获取游戏列表
  6.      */
  7.     public List<game></game> getGameSelector(Game game);   
  8.   
  9.     /**
  10.      * 根据游戏获取游戏服务器列表
  11.      */
  12.     public List<gameserver></gameserver> getServersByGame(Game game);   
  13.   
  14. }  
  15.      
  16.  

DWR配置文件:

xml 代码
  1. <!---->
  2.     "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"   
  3.     "http://getahead.ltd.uk/dwr/dwr20.dtd">  
  4. <dwr>  
  5.     <allow>  
  6.         <create creator="spring" javascript="GameService">  
  7.             <param name="class" value="org.jron.cqiu.service.GameService"/>  
  8.             <param name="beanName" value="gs"/>  
  9.             <include method="getGameSelector"/>  
  10.             <include method="getServersByGame"/>  
  11.         create>  
  12.         <convert converter="bean" match="org.jron.cqiu.model.Game"/>  
  13.         <convert converter="bean" match="org.jron.cqiu.model.GameServer"/>  
  14.         <convert converter="bean" match="org.jron.cqiu.util.LabelValue"/>  
  15.         <convert converter="bean" match="org.jron.cqiu.model.Player"/>  
  16.     allow>  
  17. dwr>  

gameseletor.jsp:

xml 代码
  1. <%@ include file="/common/taglibs.jsp" %>  
  2.   
  3. <head>  
  4.     <title><fmt:message key="gameselect.title"/></title>  
  5.     <meta name="heading" content="<fmt:message key='gameselect.heading'/>"/>  
  6.     <meta name="menu" content="gameMenu"/>  
  7.   
  8.     <script type="text/javascript" src="<c:url value='/dwr/interface/GameService.js'/>"></script>  
  9.     <script type="text/javascript" src="<c:url value='/dwr/engine.js'/>"></script>  
  10.     <script type="text/javascript" src="<c:url value='/dwr/util.js'/>"></script>  
  11.     <script type="text/javascript" src="<c:url value='/scripts/prototype.js'/>"></script>  
  12. </head>  
  13.   
  14.   
  15. <fieldset>  
  16.     <legend><fmt:message key="gameselect.heading"/></legend>  
  17.     <li style="list-style:none">  
  18.         <div>  
  19.             <fmt:message key="gameselect.game"/>:   
  20.         </div>  
  21.         <div id="game_div">  
  22.             <select id="game_sel" onchange="leveli()"/>  
  23.         </div>  
  24.     </li>  
  25.     <!--第一层-->  
  26.     <li style="list-style:none">  
  27.         <div id="l1div"></div>  
  28.         <span id="l1span"></span>  
  29.     </li>  
  30.     <!--第二层-->  
  31.     <li style="list-style:none">  
  32.         <div id="l2div"></div>  
  33.         <span id="l2span"></span>  
  34.     </li>  
  35.     <!--第三层-->  
  36.     <li style="list-style:none">  
  37.         <div id="l3div"></div>  
  38.         <span id="l3span"></span>  
  39.     </li>  
  40.   
  41.     <p id="view"></p>  
  42.   
  43. </fieldset>  

OK 关键的部分来了  gameseletor.jsp中的js部分:

js 代码
  1.   
  2. <script type="text/javascript">   
  3. var gameList;   
  4. var game;   
  5. var gameServ;   
  6. var gameServList;   
  7. var iLis;   
  8. var iiLis;   
  9. var iiiLis;   
  10.   
  11. window.onload = function() {   
  12.     //获取游戏列表   
  13.     GameService.getGameSelector(null, displayGames);   
  14. }   
  15.   
  16. function displayGames(games) {   
  17.     gameList = games;   
  18.     //显示游戏选择框   
  19.     DWRUtil.addOptions("game_sel", gameList, 'id', 'gameName');   
  20.     //初始化游戏   
  21.     initGame();   
  22.     //获取服务器列表   
  23.     GameService.getServersByGame(game, displayServs);   
  24. }   
  25.   
  26. function displayServs(servs) {   
  27.     gameServList = servs;   
  28.     //初始化游戏服务器   
  29.     initServer();   
  30.     //初始化第一层   
  31.     initLi();   
  32.     //初始化第二层   
  33.     initLii("filterNo");   
  34.     //初始化第三层   
  35.     initLiii("filterNo");   
  36.   
  37.     view();   
  38. }   
  39.   
  40. function displayLevel(servs, level) {   
  41.     gameServList = servs;   
  42.     //去除不必要的显示   
  43.     inspectLevel();   
  44.     //由第一层发起   
  45.     if (level == "li") {   
  46.         //根据第一层过滤   
  47.         liiFilter(DWRUtil.getText("li_sel"));   
  48.         if (game.gameLevel == 1) {   
  49.             changeServer(1);   
  50.         } else {   
  51.             //初始化游戏服务器   
  52.             initServer();   
  53.             //初始化第二层   
  54.             initLii("filterYes");   
  55.             //初始化第三层   
  56.             initLiii("filterNo");   
  57.         }   
  58.     }   
  59.     //由第二层发起   
  60.     if (level == "lii") {   
  61.         //根据第一层过滤   
  62.         liiFilter(DWRUtil.getText("li_sel"));   
  63.         //根据第二层过滤   
  64.         liiiFilter(DWRUtil.getText("lii_sel"));   
  65.   
  66.         if (game.gameLevel == 2) {   
  67.             changeServer(2);   
  68.         } else {   
  69.             //初始化游戏服务器   
  70.             initServer();   
  71.             //初始化第三层   
  72.             initLiii("filterYes");   
  73.         }   
  74.     }   
  75.     //由第三层发起   
  76.     if (level == "liii") {   
  77.         /*  
  78.         //根据第一层过滤  
  79.         liiFilter(DWRUtil.getText("li_sel"));  
  80.         //根据第二层过滤  
  81.         liiiFilter(DWRUtil.getText("lii_sel"));  
  82.         //根据第三层过滤  
  83.         livFilter(DWRUtil.getText("liii_sel"));  
  84.         */  
  85.         if (game.gameLevel == 3) {   
  86.             changeServer(3);   
  87.         }   
  88.     }   
  89.   
  90.     view();   
  91. }   
  92.   
  93. function leveli() {   
  94.     //变更游戏   
  95.     changeGame();   
  96.     inspectLevel();   
  97.     GameService.getServersByGame(game, displayServs);   
  98. }   
  99.   
  100. function levelii() {   
  101.     GameService.getServersByGame(game, {   
  102.         callback: function(dataFromServ) {   
  103.             displayLevel(dataFromServ, "li");   
  104.         }   
  105.     });   
  106. }   
  107.   
  108. function leveliii() {   
  109.     GameService.getServersByGame(game, {   
  110.         callback: function(dataFromServ) {   
  111.             displayLevel(dataFromServ, "lii");   
  112.         }   
  113.     });   
  114. }   
  115.   
  116. function leveliv() {   
  117.     /*  
  118.     GameService.getServersByGame(game, {  
  119.         callback: function(dataFromServ) {  
  120.             displayLevel(dataFromServ, "liii");  
  121.         }  
  122.     });  
  123.     */  
  124.     displayLevel(gameServList, "liii");   
  125. }   
  126.   
  127. function inspectLevel() {   
  128.     if (game.gameLevel == 1) {   
  129.         $('l2div', 'l2span', 'l3div', 'l3span').invoke('update');   
  130.     }   
  131.     if (game.gameLevel == 2) {   
  132.         $('l3div', 'l3span').invoke('update');   
  133.     }   
  134. }   
  135.   
  136. //去除重复的option   
  137. function removeDuplicate(options, selDefault) {   
  138.     return options.reject(function(opt) {   
  139.         return opt == selDefault;   
  140.     })   
  141. }   
  142.   
  143. function initLi() {   
  144.     if (game.gameLevel >= 1) {   
  145.         //获取第一层 String   
  146.         iLisDo();   
  147.         //显示第一层 label   
  148.         $('l1div').innerHTML = game.l1Name;   
  149.         //显示第一层   
  150.         $('l1span').innerHTML = "<select id='li_sel' onchange='levelii();'></select>";   
  151.   
  152.         DWRUtil.removeAllOptions("li_sel");   
  153.         DWRUtil.addOptions("li_sel", [gameServ.level1]);   
  154.         DWRUtil.addOptions("li_sel", removeDuplicate(iLis, gameServ.level1));   
  155.     }   
  156. }   
  157.   
  158. function initLii(from) {   
  159.     if (game.gameLevel >= 2) {   
  160.         //获取第二层 String   
  161.         iiLisDo(from);   
  162.         //显示第二层 label   
  163.         $('l2div').update(game.l2Name);   
  164.         //显示第二层   
  165.         $('l2span').innerHTML = "<select id='lii_sel' onchange='leveliii();'></select>";   
  166.   
  167.         DWRUtil.removeAllOptions("lii_sel");   
  168.         DWRUtil.addOptions("lii_sel", [gameServ.level2]);   
  169.         DWRUtil.addOptions("lii_sel", removeDuplicate(iiLis, gameServ.level2));   
  170.     }   
  171. }   
  172.   
  173. function initLiii(from) {   
  174.     if (game.gameLevel >= 3) {   
  175.         //获取第三层 String   
  176.         iiiLisDo(from);   
  177.         //显示第三层 label   
  178.         $('l3div').update(game.l3Name);   
  179.         //显示第三层   
  180.         $('l3span').innerHTML = "<select id='liii_sel' onchange='leveliv();'></select>";   
  181.   
  182.         DWRUtil.removeAllOptions("liii_sel");   
  183.         DWRUtil.addOptions("liii_sel", [gameServ.level3]);   
  184.         DWRUtil.addOptions("liii_sel", removeDuplicate(iiiLis, gameServ.level3));   
  185.     }   
  186. }   
  187.   
  188. function changeGame() {   
  189.     var gameid = $('game_sel').value;   
  190.     var gameText = DWRUtil.getText("game_sel");   
  191.     game = gameList.detect(function(g) {   
  192.         return (g.id == gameid && g.gameName == gameText);   
  193.     });   
  194. }   
  195.   
  196. function initServer() {   
  197.     gameServ = gameServList.first();   
  198. }   
  199.   
  200. function initGame() {   
  201.     game = gameList.first();   
  202. }   
  203.   
  204. function livFilter(liiiText) {   
  205.     gameServList = gameServList.findAll(function(serv) {   
  206.         return (serv.level3 == liiiText);   
  207.     });   
  208. }   
  209.   
  210. function liiiFilter(liiText) {   
  211.     gameServList = gameServList.findAll(function(serv) {   
  212.         return (serv.level2 == liiText);   
  213.     });   
  214. }   
  215.   
  216. function liiFilter(liText) {   
  217.     gameServList = gameServList.findAll(function(serv) {   
  218.         return (serv.level1 == liText);   
  219.     });   
  220. }   
  221.   
  222. function iiiLisDo(from) {   
  223.     if (from == "filterNo") {   
  224.         //根据第二层过滤   
  225.         liiiFilter(gameServ.level2);   
  226.     }   
  227.   
  228.     iiiLis = gameServList.collect(function(serv) {   
  229.         return serv.level3;   
  230.     }).uniq();   
  231. }   
  232.   
  233. function iiLisDo(from) {   
  234.     if (from == "filterNo") {   
  235.         //根据第一层过滤   
  236.         liiFilter(gameServ.level1);   
  237.     }   
  238.   
  239.     iiLis = gameServList.collect(function(serv) {   
  240.         return serv.level2;   
  241.     }).uniq();   
  242. }   
  243.   
  244. function iLisDo() {   
  245.     iLis = gameServList.collect(function(serv) {   
  246.         return serv.level1;   
  247.     }).uniq();   
  248. }   
  249.   
  250. function changeServer(level) {   
  251.     var i,ii,iii;   
  252.     i = DWRUtil.getText("li_sel");   
  253.     if (level == 1) {   
  254.         gameServ = gameServList.detect(function(serv) {   
  255.             return serv.level1 == i;   
  256.         });   
  257.     }   
  258.     if (level == 2) {   
  259.         ii = DWRUtil.getText("lii_sel");   
  260.         gameServ = gameServList.detect(function(serv) {   
  261.             return (serv.level1 == i && serv.level2 == ii);   
  262.         });   
  263.     }   
  264.     if (level == 3) {   
  265.         ii = DWRUtil.getText("lii_sel");   
  266.         iii = DWRUtil.getText("liii_sel");   
  267.         gameServ = gameServList.detect(function(serv) {   
  268.             return (serv.level1 == i && serv.level2 == ii && serv.level3 == iii);   
  269.         });   
  270.     }   
  271. }   
  272.   
  273. function view() {   
  274.     var str;   
  275.     str = "Game: " + $A($H(game)).compact() + "<br>";   
  276.     str += "Game server: " + $A($H(gameServ)).compact() + "<br>";   
  277.     $('view').update(str);   
  278. }   
  279.   
  280. </script>  

 搞定代码了 

就这样 完毕..

  • 描述: 只有游戏名和服务器时
  • 大小: 228.9 KB
  • 描述: 只有游戏名、区和服务器时
  • 大小: 263.6 KB
  • 描述: 只有游戏名、区、服务器和种族时
  • 大小: 316.8 KB
分享到:
评论

相关推荐

    DWR+Spring下拉框联动实例

    **DWR+Spring 下拉框联动实例** DWR(Direct Web Remoting)是一个开源的Java框架,它使得JavaScript和服务器端的Java代码可以进行实时交互,实现AJAX(Asynchronous JavaScript and XML)功能,而无需编写复杂的...

    DWR级联菜单下拉框

    在这个项目中,我们关注的是如何利用DWR实现一个三级联动的下拉菜单。这种交互式菜单在用户界面设计中常见,用于在多个选项之间建立关联,如省份-城市-区县的选择,以提供更加精细化的筛选。 首先,我们需要理解DWR...

    dwr.rar_dwr_dwr ajax_dwr 实现 联动 标签

    在“dwr.rar_dwr_dwr ajax_dwr 实现 联动 标签”这个项目中,我们将探讨如何利用DWR和AJAX技术来创建一个动态的、具有联动效果的标签系统。 1. **DWR基础**: DWR的核心组件包括一个服务器端的Servlet(DWR Engine...

    dwr框架实现下拉框的连动

    三、DWR实现下拉框联动步骤 1. 创建Java服务端接口:定义一个Java接口,包含获取下拉框选项的方法,例如`getOptions(String selectedValue)`。 2. 实现接口:编写接口的实现类,实现获取下拉框选项的逻辑。 3. ...

    dwr下拉联动的例子

    在这个"**dwr下拉联动的例子**"中,我们关注的是如何利用DWR来实现下拉菜单的联动效果,即在一个下拉框的选择改变时,根据所选值动态更新另一个下拉框的内容。 在传统的Web应用中,这种联动通常需要通过页面刷新...

    ajax dwr 框架实现二级联动下拉列表源码

    **Ajax DWR 框架实现二级联动下拉列表源码详解** Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。DWR(Direct Web Remoting)则是一个用于Java web应用的开源...

    DWR实现省市县三级联动小例子

    标题 "DWR实现省市县三级联动小例子" 暗示了这个压缩包可能包含一个使用Direct Web Remoting (DWR) 技术构建的示例项目,该示例展示了如何实现在网页上进行省、市、县三级联动选择的功能。这种功能在很多中国的网站...

    DWR实现的无刷新联动

    在本文中,我们将深入探讨如何使用DWR来实现下拉框的联动无刷新效果。 首先,我们需要在`web.xml`配置文件中设置DWRServlet。DWRServlet是DWR的核心组件,它处理来自JavaScript的请求并将结果返回给客户端。下面的...

    DWR二级联动(连接数据池获取数据)

    在这个"二级联动(连接数据池获取数据)"的场景中,DWR被用来在前端JS文件中获取来自后端Oracle数据库的数据,以实现联动下拉框的效果,这种效果常见于多级选择的表单中,如省市区的选择,当用户选择一个省份时,...

    dwr 实现2级联动

    两级联动通常是指在Web表单中,当用户在一个下拉框(或选择器)中做出选择时,另一个相关的下拉框或区域会根据前者的选项自动更新其内容。例如,选择一个省份后,城市列表会随之更新。这种功能常见于地址选择、分类...

    DWR 实现三级联动(2)

    【DWR实现三级联动(2)】的知识点详解 DWR (Direct Web Remoting) 是一个JavaScript库,它允许Web应用程序直接与Java后端进行交互,实现Ajax功能,即在不刷新整个页面的情况下更新部分网页内容。在这个场景中,DWR...

    dwr城市选择的联动,util.js方法的使用,动态table

    在这个场景中,“dwr城市选择的联动”是一种使用Direct Web Remoting (DWR) 技术来实现实时数据交换和页面更新的方法。DWR允许我们在JavaScript中直接调用服务器端的Java方法,从而实现动态交互。 首先,我们需要...

    ssh+dwr2实现省市二级联动

    本篇主要讨论如何利用SSH框架和DWR来实现省市二级联动效果。 省市二级联动通常是指在一个下拉菜单选择省份后,另一个下拉菜单会动态加载对应的市一级的数据。这种功能在很多网站的地址填写环节中常见,它可以提高...

    纯JSP+DWR实现三级联动下拉选择菜单实现技巧

    在本文中,我们将探讨如何使用纯JSP和Direct Web Remoting (DWR) 实现一个三级联动下拉选择菜单。这种技术通常用于地理信息系统或组织结构等需要分层次选择的场景,用户可以从一系列相关的下拉菜单中进行选择,每个...

    Mydwr的联动dgdsgdfgd

    4. **扩展至多级联动**:对于三级联动,当第二个下拉框的值改变时,同样触发DWR调用,获取第三级的数据并更新第三个下拉框。 5. **处理回调**:DWR的异步特性使得服务器的响应可以在回调函数中处理,确保数据更新的...

    ajax与dwr实现二级联动

    在Web开发中,二级联动是一种常见的交互设计,用于在两个下拉框或列表之间建立关联,通常是基于用户在第一个选择中的选项动态更新第二个选择项。在这种场景中,`AJAX (Asynchronous JavaScript and XML)` 和 `DWR ...

    java_DWR递归函数实现城市的省市县三级联动

    在前端JavaScript部分,我们可以使用DWR的`execute`方法来调用这个Java服务,然后动态更新下拉框选项。例如,当用户在省的选择框中改变选项时,触发一个事件,通过DWR调用`getChildrenById`函数,传入当前选中的省ID...

    DWR实现的三级联动链表的例子

    在这个“DWR实现的三级联动链表的例子”中,我们将探讨如何使用DWR创建一个能够动态更新的三级联动列表,这种功能常见于如地区选择、产品分类等场景。 首先,我们需要理解DWR的基本工作原理。DWR通过在浏览器端创建...

    dwr写的二级联动,要的快

    在本例中,“dwr写的二级联动,要的快”指的是利用DWR实现的网页下拉框的二级联动效果。这种效果常见于地址选择、部门选择等场景,用户在一级选择框中选择一个选项后,二级选择框会自动更新为与一级选择相关的子选项...

    DWR实现省市县三级联动

    本话题聚焦于利用DWR来实现省市县三级联动的效果,这是一种常见的前端交互设计,常见于地址选择器或地区筛选功能中。 在省市县三级联动中,用户首先选择省份,接着根据省份的选择自动填充对应的市,再根据市的选择...

Global site tag (gtag.js) - Google Analytics