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

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;

};

}; //end

30、报错: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.MyEclipse

Window-->Preference-->MyEclipse-->ApplicationServers-->Tomcat-->Tomcat 6.x-->JDK-->Optional Java VM arguments下填上:

-Xms256m-Xmx512m -XX:PermSize=256m -XX:MaxPermSize=600m

2.Window系统

2.1.编辑tomcat的catalina.bat文件,在第一行的后面增加一句:

setJAVA_OPTS=-server -Xms256m -Xmx512m -XX:PermSize=128M -XX:MaxPermSize=256M

3.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/sh

JAVA_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));    //->undefined

alert(eval(‘(‘+ code2 + ‘)‘));    //->[object Object] 例如JSON 对象就是利用这个

可以看到,对于对象声明语句来说,仅仅是执行,并不能返回值。为了返回常用的“{}”这样的对象声明语句,必须用括号括住,以将其转换为表达式,才能返回其值。这也是使用JSON来进行Ajax开发的基本原理之一。在例子中可以清楚的看到,第二个alert语句输出的是undefined,而第三个加了括号后输出的是语句表示的对象。

http://blog.csdn.net/ikmb/article/details/4411237

41ibatis的配置文件.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方法了

时间: 2024-10-21 03:42:14

java开发遇到的问题总结(四)的相关文章

Java开发桌面程序学习(四)——常用应用布局模板和简单分析

布局 前言 刚开始的时候,不知道使用什么布局,发现SceneBuilder其实有8.5版本的,里面就是有提供一个简单的桌面程序模板,8.5可以去官网下载,不过网速好像有点慢,慢慢等吧,官网下载地址 布局分析 外层是一个VBox,然后使用MenuBar,MenuBar的宽度就会自动和VBox的宽度保持一致(之前我使用的是FlowPane,弄了半天都不能自动适应宽度). MenuBar中有很多常用的MenuItem选项,我们可以根据自己的选择删除,并修改文字 中间的空白面板就是一个AnchorPan

[JAVA]十四种Java开发工具点评

作者:兄弟连 在计算机开发语言的历史中,从来没有哪种语言象Java那样受到如此众多厂商的支持,有如此多的开发工具,Java菜鸟们如初入大观园的刘姥姥,看花了眼,不知该何种选择.的确,这些工具各有所长,都没有绝对完美的,就算是老鸟也很难做出选择.在本文中我简要介绍了常见的十四种Java开发工具的特点,管中窥"器",希望能对大家有所帮助. 1.JDK (Java Development Kit) 2.Java Workshop 3.NetBeans 与Sun Java Studio 5 4

Java开发人员必须掌握的两个Linux魔法工具(四)

子曰:"工欲善其事,必先利其器." 做一个积极的人 编码.改bug.提升自己 我有一个乐园,面向编程,春暖花开! 学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解知识或者技术,让学习之旅充满乐趣,这就是写博文的初心. 故事旁白: 在哈利波特的电影中,每个巫师都有一根自己的魔法棒,魔法棒是用来施展魔法的.而今天我们也要学会使用魔法棒(工具)来施展我们的魔法. 魔法地图: 一.魔法清单备忘录工具-cheat cheat(作弊)允许在命令行上创建和查看交互式备忘

配置java开发环境

一.关于JDK的相关内容,参考http://hi.baidu.com/innuyasha/blog/item/db12f21f1d7e05f4e1fe0b30.html和http://hi.baidu.com/innuyasha/blog/item/b40eb011656f987fcb80c41e.html 二.Eclipse下载地址 http://www.eclipse.org/downloads/根据你的操作系统选择你要下的版本,下载后直接解压即可使用,无需安装. 三.Myeclipsemy

Unit01: JAVA开发环境案例

Top JAVA Fundamental DAY01 JDK及Eclipse目录结构操作 JDK的安装及配置 控制台版的JAVA HelloWorld 使用Eclipse开发Java应用程序 1 JDK及Eclipse目录结构操作 1.1 问题 为熟练掌握 Linux 下的目录操作,本案例需要完成如下操作: 在Linux系统下,浏览jdk的目录结构. 在Linux系统下,浏览eclipse的目录结构. 1.2 方案 完成此案例,需要用到一些常用的 Linux命令.这些命令如下所示: pwd :显

20145301《Java程序设计》实验报告一:Java开发环境的熟悉

20145301<Java程序设计>实验报告一:Java开发环境的熟悉 课程:Java程序设计 实验名称:Java开发环境的熟悉 实验目的与要求: 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程: 2.完成实验.撰写实验报告,实验报告模板见QQ群,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如“查网络”.“问同学”.“看书”等一律得0分)以及分析(从中可以得到什

浅谈用java解析xml文档(四)

继续接上一文,这一阵子因为公司项目加紧,导致最后一个解析xml文档的方式,还没有总结,下面总结使用dom4J解析xml. DOM4J(Document Object Model for Java) 使用dom4j解析,个人认为是四种解析方式里面最方便的一种,DOM4J是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件.如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用D

Ubuntu 14.04下java开发环境的搭建--1--JDK的安装

说明:以下内容均是本人个人经验,接触ubuntu系统是从10.04开始,转眼转眼之间已经四年了,经常浏览各种相关论坛,发现从我刚开始基础到现在,论坛上还有很多人在问关于JAVA环境配置的相关问题.所以我把我的个人经验总结成下文,仅供新手参考,老鸟绕行! 下面开始. 首先java开发环境包括的一些基本内容: 1.jdk 安装 ----jdk-6u45-linux-x64.bin 2.eclipse 安装 ----eclipse-jee-kepler-SR2-linux-gtk-x86_64.tar

《阿里巴巴Java开发手册(正式版》读记

前几天,阿里巴巴发布了<阿里巴巴Java开发手册(正式版>,第一时间下载阅读了一番. 不同于一般大厂内部的代码规范,阿里巴巴的这本Java开发手册,可谓包罗万象,几乎日常Java开发中方方面面都有所涉及. 在知乎上,也有关于这本开发手册的讨论十分热烈的帖子. 由于里面涉及的内容比较多,下面重点罗列下一些我读过之后十分赞同与持保留意见的条目: (一)编码规范 (一)命名规约 8. [强制]POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误. 反例:定义为基本数据类型b

Chapter 1 Java开发前奏

第1章:初识Java 1.1 计算机的基础知识 1.1.1 计算机 计算机(Computer)全称:电子计算机,俗称电脑.是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算机称为裸机.常见的形式有台式计算机.笔记本计算机.大型计算机等. 计算机的应用已渗透到社会的各个领域,正在改变着人们的工作.学习和生活的方式,推动着社会的发展.哪些方面? 1:科学计算 科学计算也称数值计算.计算机最开始是为解决科学研究和工程设计中遇到的大量数学问题的