您的位置:首页 > 编程语言 > Java开发

java开发遇到的问题总结(四)

2015-10-12 17:05 405 查看
26、判断各种类型的空,不过要加包importorg.apache.commons.lang3.StringUtils;if(StringUtils.isEmpty(sort)){ 代码;}27、后台排序代码(之前已经把查询到的数据放入list,然后对总的list里的数据进行排序):a.前台的remoteSort: true会传来json字符串[{property:"column0",direction:"ASC"}]b.在Action中先声明2个变量:private String sort;private String dir;用来接收c.把json对象转为java字符串:当点击页面的排序时会再进行一次查询,所以在查询方法中进行转换public String queryPerEventList(){if(sort!=null){ System.out.println(sort); Map<String, String> map=JsonUtil.getSort(sort); sort=map.get("property"); dir=map.get("direction"); } }JsonUtil为自己写的一个工具类,里面有getSort方法,具体怎么转换的代码 publicstatic Map<String,String> getSort(String sort){ Gsongson = new Gson(); Map<String,String>map = new HashMap<String,String>(); if(sort == null || "".equals(sort)){ map.put("direction", ""); map.put("property", ""); }else{ List<SortData> sortData =gson.fromJson(sort, newTypeToken<List<SortData>>(){}.getType()); map.put("direction", sortData.get(0).getDirection()); map.put("property", sortData.get(0).getProperty()); } return map; }d.然后在String jsondatas=this.service.findDatas(codenames,codenameList,fromtime,totime,isfirst,currentPage,pageSize,perg,sort,dir); //grid的列头中添加sort与dir参数e.在service中写具体的排序方法,不过首先把合计提取出来,使其不参与排序,一直在最下方booleanflat=false;//is first if((isfirst!=null&&!isfirst.equals("")&&isfirst.equals("1"))){ flat=true; } //当首次进入时将合计计算并提出来 list=this.findNewList(list,b,codenames,codenameList,flat,currentPage,pageSize,false); } Map<String,String> total=null; for(int i=0;i<list.size();i++){ Map<String,String>map=list.get(i); if(map==null){ list.remove(i); i--; }else{ if(map!=null&& ((map.get("taskname")!=null&&map.get("taskname").equals("合计")) ||(map.get("TASKNAME")!=null&&map.get("TASKNAME").equals("合计"))) ){ total=list.get(i); list.remove(i); i--; } } }具体排序方法如下:if(sort!=null){//Collection.sort为特有的方法Collections.sort(list, new Comparator<Map<String,String>>(){@Override//重写此方法,使其改为适合此情况的方法publicint compare(Map<String, String> map1, Map<String, String> map2) { if(map1!=null&&map2!=null){ Stringsort1=map1.get(sort); Stringsort2=map2.get(sort); if((sort1!=null&&!sort1.trim().equals(""))&&(sort2!=null&&!sort2.trim().equals(""))){ if(((sort1!=null&&!sort1.trim().equals(""))&&!(sort.trim().equals("taskname")|| sort.trim().equals("TASKNAME")))&&((sort2!=null&&!sort2.trim().equals(""))&&! (sort.trim().equals("taskname")||sort.trim().equals("TASKNAME")))){ float f1=0; float f2=0; if(sort1.indexOf('%')!=-1){ f1=Float.valueOf(sort1.trim().replace("%",""))/100; }else{ f1=Float.valueOf(sort1.trim()); } if(sort2.indexOf('%')!=-1){ f2=Float.valueOf(sort2.replace("%",""))/100; }else{ f2=Float.valueOf(sort2.trim()); } if(f1>f2){ if(dir.equals("ASC")){ return 1; }else{ return -1; } } if(f1==f2){ return 0; } if(f1<f2){ if(dir.equals("ASC")){ return -1; }else{ return 1; } } } } } return 0; } }); }28、bug描述:当列太多时,拖动水平滚动条后再点击列上的排序会出现错位问题,详见附件1.解决办法:在var grid = Ext.create('Ext.grid.Panel', {invalidateScrollerOnRefresh: false})29、extjs中如果一列即有带%的数字字符串,又有不带%的字符串,想对它们进行排序,需要重写extjs框架里的方法,代码如下(前台排序): function changeSortVal(val){ if(val.indexOf('%')>-1){ val = val.substring(0,val.length-1)/100; } return val-0; }; Ext.data.Store.prototype.createComparator= function(sorters){ returnfunction(r1, r2){ var s =sorters[0], f=s.property; var v1 =r1.data[f], v2 = r2.data[f]; var result= 1; if(s.direction== 'ASC'){ result *=-1; // alert("result:"+result); } v1 = changeSortVal(v1); v2 = changeSortVal(v2); var a =result * (v1 == v2 ? 0 : (v1 > v2 ? -1 : 1)); if(a==0&&(r1.data[f]!=r2.data[f])){ if(r1.data[f].indexOf("%")>-1){ // alert("1:"+result); returnresult; }else{ //alert("2:"+result); return-result; } } // alert("dss:"+a); return a; }; }; //end30、报错:Unableto instantiate Action, ObjCheckAction, defined for 'exportObjCheckAction' in namespace '/'ObjCheckAction原因:查看spring中的配置,比如此处错误为在spring中配置的action的id为“objCheckAction”而在struts.xml中配置action的class值却为“ObjCheckAction”,导致出错。31、前台点击表格的列会传来json字符串{[“property”:列名,“direction”:ASC或DESC]},有时后台需要把它转为JAVA可用的字符串,可以先把其转为MAP,再遍历出来:(与27讲同一问题,但这个没有实现出来排序,在此只是学习JSON的转换)Iterator<Map<String,Object>> it = JsonUtil.getList(sort).iterator(); StringsortStr = "";while (it.hasNext()) { Map<String, Object> map = it.next(); String property = (String)map.get("property"); int val = (int)property.charAt(0); if(val>=48 && val<=57){ property=property.substring(1); } sortStr += "\""+property+"\" "+ map.get("direction")+",";}sortStr= sortStr.substring(0,sortStr.length()-1);returnsortStr;}32、报错: There is no Action mapped for action namequeryAlarmCode. - [unknown location]原因:1.struts2的配置文件没有放在src目录下,2.struts2中配置的package标签的namespace属性配置有误,或action name、class、method属性配置错误3.页面调用Action的方式有错但我这次产生这错误都不是上面的原因.因为我是使用ajax方式提交,所以package扩展于json-default,其它配置(略),检查配置都没有问题,检查调用方式也没问题,最后想想好像JSON for struts2的插件JAR包还没加上,找到对应STRUTS2相应版本的struts-json-plugin-xxx.jar,加入到应用,问题解决.最后,加入最后一个导致如题的问题原因:4.没有加入json对应的插件JAR包33、有些Action中会有privatestaticfinallongserialVersionUID =4955166347375237879L;原因:ActionSupport类中实现了, java.io.Serializable 接口,加以上的常量是为了防止序列化时出现问题。序列化:流变为对象,反序列化:对象变为注。当它们互相转换时如果参数个数不相等,并且没上以上的那个常量就会出错,有了它便不会。34、报错:命令未正确结束原因:查看ibatis中的.xml文件中是否有无用的字符,查看SQL是否写正确35EXTJS日期控件想修改其传入后台的日期格式:modifyTime:modifyTime_ele.getRawValue(),一般是在查询按钮里添加此代码,其中modifyTime为控件的ID,modifyTime_ele为日期控件36、在JAVA中导出EXCEL表时报错Caused by: java.lang.OutOfMemoryError: Javaheap space原因:内存溢出,这个异常和JVM默认划分的内存上限是128M有关。解决方法:设置TOMCAT的内存大小1.MyEclipseWindow-->Preference-->MyEclipse-->ApplicationServers-->Tomcat-->Tomcat 6.x-->JDK-->Optional Java VM arguments下填上:-Xms256m-Xmx512m -XX:PermSize=256m -XX:MaxPermSize=600m2.Window系统 2.1.编辑tomcat的catalina.bat文件,在第一行的后面增加一句:setJAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M3.Linux系统 编辑tomcat的catalina.sh文件,在第一行的后面增加一句:JAVA_OPTS='-server-Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M'注意:单引号不能少,-server表示以server模式运行(运行效率比默认的client高很多,自己云去测试),-Xms256m是最小内存,-Xmx512m是最大内存,其中的256与512可根据你自己的内存做相应调整,PermSize/MaxPermSize最小/最大堆大小.一般报内存不足时,都是说这个太小,堆空间剩余小于5%就会警告,建议把这个稍微设大一点,不过要视自己机器内存大小来设置,我自己的文件如下:#!/bin/shJAVA_OPTS='-server-Xms1024m -Xmx1024m XX:PermSize=128M -XX:MaxPermSize=256M'#-----------------------------37、在EXTJS中会有请求超时这一说,一般默认是30S,当超过这个时间就不再发送请求,可以在页面进行改变:timeout : 30*60*1000,可以在火狐浏览器的BUG页面的脚本查看请求时间,详看附件(看请求时间)38、有关查询的小结:在JAVA中可以把页面中所有的控件等封装到bean里,在action中直接使用bean来使用其封装起来的属性,不过action需要实现ModelDriven方法,还需要有这个getModel方法:publicMonitorChangeBean getModel() { returnmonitorChangeBean; }39、取得一年中某周的起始与结束日期附件:工具类DateUtil.java。在Action中的方法为:/** * 获取一年中某一周的起始日期与结束日期 */ public String queryWeekDate() throws Exception{ Date date = null; date = DateUtil.getWeekFirstDate(year, week); String firstDate = DateUtil.dateToString(date,"yyyy-MM-dd"); date = DateUtil.getWeekLastDate(year, week); String lastDate = DateUtil.dateToString(date,"yyyy-MM-dd"); data.put("firstDate", firstDate); data.put("lastDate", lastDate); returnSUCCESS; }在struts-xml中配置:<action name="getWeekDate" class="monitorChangeAction" method="queryWeekDate"> <result name="success" type="json"> <param name="root">data</param> </result></action>40eval函数 success: function (response, options) { varres = eval('('+response.responseText+')'); onlineTime_ele.setValue(res.firstDate); endTime_ele.setValue(res.lastDate); }, eval函数作用是动态执行,即可以把字符串当作脚本来执行,response.responseText得到的是字符串类型,赋给res变成对象,然后便可以调用lastDate了。网上解说:eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefined。需要特别注意的是对象声明语法“{}”并不能返回一个值,需要用括号括起来才会返回值,简单示例如下:varcode1='"a" + 2'; //表达式varcode2='{a:2}'; //语句alert(eval(code1)); //->'a2'alert(eval(code2)); //->undefinedalert(eval('('+ code2 + ')')); //->[object Object] 例如JSON 对象就是利用这个可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。http://blog.csdn.net/ikmb/article/details/441123741ibatis的配置文件.xml中的<typeAliasalias=>作用42、报错:Bean property'orgFrameService' is not writable or has an invalid setter method. Does theparameter type of the setter match the return type of the getter?原因:1、配置错误;2在Action中查看是否各个属性均有set与get方法了

本文出自 “java” 博客,请务必保留此出处http://haoxiaoli.blog.51cto.com/8691383/1702186
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: