ssh+dwr实现级联操作
生活随笔
收集整理的這篇文章主要介紹了
ssh+dwr实现级联操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
今天做了一個級聯操作,搗鼓了一天,整出的效果圖如下:
?
?
其步驟大致分為以下幾步:
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实现级联操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: log+android+bp,第二章:A
- 下一篇: 《华为工作法》4 科学合理的工作原则