ssh+dwr实现级联操作
生活随笔
收集整理的這篇文章主要介紹了
ssh+dwr实现级联操作
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天做了一個(gè)級聯(lián)操作,搗鼓了一天,整出的效果圖如下:
?
?
其步驟大致分為以下幾步:
1.創(chuàng)建實(shí)體類,這里我將數(shù)據(jù)庫貼出來,具體代碼不在詳述:
?
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>這個(gè)完成后,新建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對應(yīng)的是代碼里的menuService類,dwrInvokeDataAction則是你jsp里將要引用的js,通過這個(gè)js去調(diào)用menuService類里的方法。 3.建立menuService類方法,我這里是抽象類加實(shí)現(xiàn)類即menuService是接口,實(shí)現(xiàn)方法在menuServiceImpl類里面(這里很蛋疼,之前我dwr操作的是action層,action調(diào)用的是service層實(shí)現(xiàn)的,但是理想很豐滿,現(xiàn)實(shí)很骨感,因?yàn)槲襠wr集成了三大框架,當(dāng)前臺(tái)到用到action層方法時(shí),service對象為空,無法調(diào)用service里的方法,現(xiàn)在只好把a(bǔ)ction去掉,直接調(diào)用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");}/** 通過市得到區(qū)String*/public String findAreaString(String city){return this.findInitString(city,"city");}</p><p>?/*** 當(dāng)進(jìn)來該頁面時(shí)首先調(diào)用該方法,初始化頁面省份,然后省份下拉列表就有值了,然后根據(jù)省份下拉列表所選的值,通過onchange事件傳到后臺(tái),去查詢市。*/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里的方法準(zhǔn)備好后,咱現(xiàn)在先看進(jìn)入該頁面的初始化方法,action里是這樣調(diào)用的:</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);//縣級或區(qū)public String initRegist(){privinceMap = menuService.findPrivinceMap();//調(diào)用service層里的方法,先把省份查出來,市和區(qū)暫時(shí)沒值cityMap = new LinkedHashMap<String,String>(0);areaMap = new LinkedHashMap<String,String>(0);return SUCCESS;} ?5、action準(zhǔn)備完成后,咱一起進(jìn)入最后一關(guān)jsp頁面,我先把代碼貼出來,后面一起慢慢研究:
jsp代碼如下:
<table class="tab_1"><tr id="damagePrivinceTr" ><td align="right">出險(xiǎn)所在省</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 >出險(xiǎn)所在市</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">出險(xiǎn)所在區(qū)</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; //如果是省份,則查詢結(jié)果會(huì)返回市和區(qū),通過"-|-"隔離開來,下面回調(diào)函數(shù)會(huì)將其分開if(field == 'privince'){dwrInvokeDataAction.findCityString(obj.value,rollbackgetCityMap);}else if(field == 'city'){dwrInvokeDataAction.findAreaString(obj.value,rollbackgetAreaMap);}return true;}</p><p>?function rollbackgetCityMap(returnObject){//回調(diào)函數(shù)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>來個(gè)小結(jié),為了不耽誤大家的時(shí)間,此處可以略過,這里純屬個(gè)人感想:
今天是我第一次寫博客,也是我22歲的生日,就想寫一篇博客送給自己當(dāng)做禮物。今年也是我學(xué)校生涯的最后一年(今年六月畢業(yè)).弱弱的說一句,我博客寫完了才發(fā)現(xiàn)有源代碼這個(gè)樣式,蛋疼!,先這樣,下次博客肯定比這次好看。
總結(jié)
以上是生活随笔為你收集整理的ssh+dwr实现级联操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log+android+bp,第二章:A
- 下一篇: 《华为工作法》4 科学合理的工作原则