今天做了一个级联操作,捣鼓了一天,整出的效果图如下:

其步骤大致分为以下几步:

1.创建实体类,这里我将数据库贴出来,具体代码不在详述:

2.下载dwr 的jar包,这里以dwr2.0为例。放到WebRoot的lib目录下,接着配置web.xml文件,示例如下:

<!-- 配置DWR前端控制器 --><servlet><servlet-name>dwrServlet</servlet-name><servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class><!-- 指定配置文件 --><init-param><param-name>config</param-name><param-value>/WEB-INF/dwr.xml                </param-value></init-param><init-param><param-name>debug</param-name><param-value>true</param-value></init-param></servlet><servlet-mapping><servlet-name>dwrServlet</servlet-name><url-pattern>/dwr/*</url-pattern></servlet-mapping>

这个完成后,新建dwe.xml文件,配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd"><dwr><allow><!--dwr操作的service层, 直接到容器里拿 --><create creator="spring" javascript="dwrInvokeDataAction"><param name="beanName" value="menuService"/></create><convert converter="bean" match="cn.com.car.model.*"/></allow></dwr>

这里需要注意的是menuService对应的是代码里的menuService类,dwrInvokeDataAction则是你jsp里将要引用的js,通过这个js去调用menuService类里的方法。 3.建立menuService类方法,我这里是抽象类加实现类即menuService是接口,实现方法在menuServiceImpl类里面(这里很蛋疼,之前我dwr操作的是action层,action调用的是service层实现的,但是理想很丰满,现实很骨感,因为我dwr集成了三大框架,当前台到用到action层方法时,service对象为空,无法调用service里的方法,现在只好把action去掉,直接调用service层)。

<span style="font-family:SimHei;font-size:14px;color:#000000;">menuService里的方法如下:</span>
 
//通过页面的onchange事件重写下拉列表
<p>public String findInitString(String privince, String code) {Session s=HibernateUtil.getSession();String hql = " from PrplArea prpdpropertyarea where prpdpropertyarea.superAreaCode = '"+privince+"' and prpdpropertyarea.validStatus = '1' ";Query query=s.createQuery(hql);List<PrplArea> prpdpropertyareaList = query.list();StringBuffer sb = new StringBuffer();if("privince".equals(code)){sb.append("<select name=\"prpLregist.cityCode\" id=\"city\"  οnchange=\"setStyle('city',this);\">");}else if("city".equals(code)){sb.append("<select name=\"prpLregist.regionalCode\" id=\"area\"  >"); }sb.append("<option value=''>请选择</option>");for (PrplArea prpdpropertyarea : prpdpropertyareaList) {sb.append("<option value='");sb.append(prpdpropertyarea.getAreaCode());sb.append("'>");sb.append(prpdpropertyarea.getAreaCName());sb.append("</option>");} sb.append("</select>"); sb.append("<span class=\"required\">*</span>");if("privince".equals(code)){sb.append("-|-");sb.append("<select name=\"prpLregist.regionalCode\" id=\"area\" >");sb.append("<option value=''>请选择</option>");sb.append("</select>");}return sb.toString();}/** 通过省得到市String*/public String findCityString(String privince){return this.findInitString(privince,"privince");}/** 通过市得到区String*/public String findAreaString(String city){return this.findInitString(city,"city");}</p><p> /*** 当进来该页面时首先调用该方法,初始化页面省份,然后省份下拉列表就有值了,然后根据省份下拉列表所选的值,通过onchange事件传到后台,去查询市。*/public Map<String, String> findPrivinceMap() {Session s=HibernateUtil.getSession();Map<String,String> privinceMap = new LinkedHashMap<String,String>(0);String hql = "from PrplArea as  prplArea where prplArea.superAreaCode = '0000' and prplArea.validStatus='1' order by areaCode";Query query=s.createQuery(hql);List<PrplArea> PrpdpropertyareaList = query.list();for (PrplArea prpdpropertyareaPrivince : PrpdpropertyareaList) {privinceMap.put(prpdpropertyareaPrivince.getAreaCode(), prpdpropertyareaPrivince.getAreaCName());}return privinceMap;}</p>
 
<span style="font-family:SimHei;font-size:14px;color:#000000;">4.menuService里的方法准备好后,咱现在先看进入该页面的初始化方法,action里是这样调用的:</span>
   private MenuService menuService;//这是咱刚写的service层private Map<String,String> privinceMap = new LinkedHashMap<String,String>(0);//省份private Map<String,String> cityMap = new LinkedHashMap<String,String>(0);//市级private Map<String,String> areaMap = new LinkedHashMap<String,String>(0);//县级或区public String initRegist(){privinceMap = menuService.findPrivinceMap();//调用service层里的方法,先把省份查出来,市和区暂时没值cityMap = new LinkedHashMap<String,String>(0);areaMap = new LinkedHashMap<String,String>(0);return SUCCESS;}
 

5、action准备完成后,咱一起进入最后一关jsp页面,我先把代码贴出来,后面一起慢慢研究:

jsp代码如下:

<table class="tab_1"><tr id="damagePrivinceTr" ><td align="right">出险所在省</td><td align="left"><s:select name="prpLregist.provinceCode" id="privince"list="privinceMap" headerKey="" headerValue="请选择"οnchange="setStyle('privince',this);" theme="simple"></s:select></td><td >出险所在市</td><td id="cityTD1"><s:select name="prpLregist.cityCode" id="city" list="cityMap"headerKey="" headerValue="请选择"οnchange="setStyle('city',this);" theme="simple"></s:select></td><td class="bgc_tt short">出险所在区</td><td class="long" id="areaTD1"><s:select name="prpLregist.regionalCode" id="area" list="areaMap"headerKey="" headerValue="请选择" theme="simple"></s:select></td></tr>
</table>
 

js代码如下:

<p><script type="text/javascript"></p><p>function setStyle(field,obj){getMap(field,obj);}function getMap(field,obj){var outputObject;var inputObject = obj.value;
//如果是省份,则查询结果会返回市和区,通过"-|-"隔离开来,下面回调函数会将其分开if(field == 'privince'){dwrInvokeDataAction.findCityString(obj.value,rollbackgetCityMap);}else if(field == 'city'){dwrInvokeDataAction.findAreaString(obj.value,rollbackgetAreaMap);}return true;}</p><p> function rollbackgetCityMap(returnObject){//回调函数var array = returnObject.split('-|-');if(array.length>1){document.getElementById("areaTD1").innerHTML = array[1];}document.getElementById("cityTD1").innerHTML = array[0];}</p><p> function rollbackgetAreaMap(returnObject){document.getElementById("areaTD1").innerHTML = returnObject;}</script></p>

最后引用js(注意顺序):

   <script type='text/javascript' src='/claim_biyesheji/dwr/interface/dwrInvokeDataAction.js'></script><script type='text/javascript' src='dwr/engine.js'></script><script type='text/javascript' src='dwr/util.js'></script>

来个小结,为了不耽误大家的时间,此处可以略过,这里纯属个人感想:

今天是我第一次写博客,也是我22岁的生日,就想写一篇博客送给自己当做礼物。今年也是我学校生涯的最后一年(今年六月毕业).弱弱的说一句,我博客写完了才发现有源代码这个样式,蛋疼!,先这样,下次博客肯定比这次好看。

ssh+dwr实现级联操作相关推荐

  1. SSH中关于级联删除不能实现的一些问题

    级联(cascade)在数据库的多表的操作中是一个比较重要的操作,级联是用来设计一对多关系的.对于一对多的表关系中, 一方表可以通过级联来操对多发表中跟自己相关联的表:比如更新,删除等等. 而在SSH ...

  2. LINQ那些事儿(2)- 简单对象的CRUD操作和Association的级联操作

    从(1)我们看到,当生成entity class定义时,entity class或xml mapping文件中都已经完整的包含了entity和关系数据库的映射信息了,LINQ2SQL会根据这些信息来把 ...

  3. mysql外键约束语句级连_mysql之外键约束(级联操作等) 父表子表

    不理解的地方标注问号. 网上不同的博客讲的,之间似乎有些矛盾,求推荐好书. 写得不好请指出错误. 父表和子表 当两个表建立一对多关系的时候,"一"的那一端是父表,"多&q ...

  4. axure 如何设置选项联动_Axure下拉框级联操作

    现实生活中有很多的下拉框是级联操作的,即因为第一个下拉框的选择,影响到后面的下拉框的选择的列表的数据.或许在代码中,这些操作相对比较简单,通过前一个下拉框的选择项来控制后一个下拉框的数据的动态添加.那 ...

  5. 多重连弹の多层级联 下拉框/查找框级联操作

    为什么80%的码农都做不了架构师?>>>    省市区级联,需求背景就不多说了,几乎是管理系统必备的一个功能,对于大部分初级开发者来说,做这种功能还是比较繁琐,又要写后端又要写前端. ...

  6. Hibernate @OneToMany 及 @Cascade级联操作

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:团队开发中的 Git 实践个人原创+1博客:点击前往,查看更多 作者:潘佳琦 链接:https://segmen ...

  7. Oracle 12C -- truncate的级联操作

    在之前的版本中,存在外键约束时,无法直接truncate父表.在12C中,对truncate操作添加了级联操作特性. 前提是创建外键约束时,使用了"on delete casacde&quo ...

  8. Hibernate一对多关联映射及cascade级联操作

    我们以客户(Customer)与订单(Order)为例 实体类创建 Order订单实体类 //订单-----多的一方 public class Order {private Integer id;pr ...

  9. JPA规范:一对多、一对一、多对多的双向关联与级联操作以及JPA联合主键

    通常在企业开发中,开发Dao层有两种做法:  (1)先建表,后再根据表来编写配置文件和实体bean.使用这种方案的开发人员受到了传统数据库建模的影响.  (2)先编写配置文件和实体bean,然后再生成 ...

  10. 【原】TreeView+Checkbox级联操作(IE/FireFox测试通过)

    TreeView+Checkbox级联操作 步骤1.前台页面拖放一个Treeview,将其ShowCheckBoxes属性设置为All <asp:TreeView ID="tvCoun ...

最新文章

  1. Swift3.0语言教程查找字符集和子字符串
  2. memcache缓存服务器(nginx php memcache mysql)
  3. 学习dos批处理,再也不怕老板安排一些重复性高的工作了,几行代码就搞定!
  4. Toad for Oracle工具的使用(二)
  5. ios支付宝支付失败不回调_iOS 支付宝网页支付回调问题
  6. Erlang消息传递-tut15.erl
  7. C#委托实现C++ Dll中的回调函数
  8. 硬件安全 (1) —— SHA-1算法在FPGA上的实现
  9. Oracle/PLSQL While Loop
  10. 进程与线程之间的区别与联系
  11. 关于soapUi工具的安装使用教程
  12. linux系统安装vs2015,Visual Studio 2015正式版安装图文详解
  13. 计算机新手必备知识,新手怎么查看电脑配置,购机必备知识!
  14. Win11如何开启移动热点?Win11开启移动热点的方法
  15. jsp 展示服务器pdf文件,jsp实现pdf在线预览功能
  16. 今日头条Go建千亿级微服务的实践
  17. 英国Foresight太阳能基金卖股集资 投资200MW光伏项目
  18. 这是一个通过c语言来把NX10.0画的直线等关键数据提取出来,可以通过电脑端显示,并可以通过CIMCO Edit8来验证;
  19. 操作系统精选习题——第六章
  20. 数据结构PTA 案例6-1.6 哈利·波特的考试

热门文章

  1. oracle 19c em,Oracle 19C EM
  2. 2,2,2,2-((ethene-1,1,2,2-tetrakis(benzene-4,1-diyl))tetrakis-(oxy)tetraacetic acid 2,2,2,2-四(乙烯基-苯氧
  3. PUN 2 菜鸟养成记 3进入游戏
  4. 微信怎么收银行卡的消息服务器,微信零钱提现,这样操作,可以免去手续费
  5. python猜拳代码_猜拳代码python
  6. 前15天mysql_15天快速学习数据库Mysql基础操作命令
  7. 智齿科技携手无忧我房 VR+AI新品亮相GTC
  8. 未转变者服务器组队教程,未转变者怎么创建联机服务器及创建方法介绍
  9. 支付支付简要原理整理
  10. 破解云锁服务器安全软件的反爬机制(python)