java前台和后台遇到的问题_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个变量:privateStringsort;privateStringdir;用来接收

c.把json对象转为java字符串:当点击页面的排序时会再进行一次查询,所以在查询方法中进行转换

publicStringqueryPerEventList(){

if(sort!=null){

System.out.println(sort);

Map map=JsonUtil.getSort(sort);

sort=map.get("property");

dir=map.get("direction");

}

}

JsonUtil为自己写的一个工具类,里面有getSort方法,具体怎么转换的代码

publicstaticMap getSort(String sort){

Gsongson =newGson();

Mapmap =newHashMap();

if(sort ==null||"".equals(sort)){

map.put("direction","");

map.put("property","");

}else{

List sortData =gson.fromJson(sort,newTypeToken>(){}.getType());

map.put("direction", sortData.get(0).getDirection());

map.put("property", sortData.get(0).getProperty());

}

returnmap;

}

d.然后在Stringjsondatas=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 total=null;

for(inti=0;i

Mapmap=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,newComparator>(){

@Override//重写此方法,使其改为适合此情况的方法

publicintcompare(Map map1, Map 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")))){

floatf1=0;

floatf2=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")){

return1;

}else{

return-1;

}

}

if(f1==f2){

return0;

}

if(f1

if(dir.equals("ASC")){

return-1;

}else{

return1;

}

}

}

}

}

return0;

}

});

}

28、bug描述:当列太多时,拖动水平滚动条后再点击列上的排序会出现错位问题,详见附件1.解决办法:

在vargrid = Ext.create('Ext.grid.Panel', {invalidateScrollerOnRefresh:false})

29、extjs中如果一列即有带%的数字字符串,又有不带%的字符串,想对它们进行排序,需要重写extjs框架里的方法,代码如下(前台排序):

functionchangeSortVal(val){

if(val.indexOf('%')>-1){

val = val.substring(0,val.length-1)/100;

}

returnval-0;

};

Ext.data.Store.prototype.createComparator=function(sorters){

returnfunction(r1, r2){

vars =sorters[0], f=s.property;

varv1 =r1.data[f], v2 = r2.data[f];

varresult= 1;

if(s.direction=='ASC'){

result *=-1;

// alert("result:"+result);

}

v1 = changeSortVal(v1);

v2 = changeSortVal(v2);

vara =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);

returna;

};

};//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> it = JsonUtil.getList(sort).iterator();

StringsortStr ="";

while(it.hasNext()) {

Map map = it.next();

String property = (String)map.get("property");

intval = (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是否写正确

35、EXTJS日期控件想修改其传入后台的日期格式:

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中的方法为:

/**

*获取一年中某一周的起始日期与结束日期

*/

publicString queryWeekDate()throwsException{

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中配置:

data

40、eval函数

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

41、ibatis的配置文件.xml中的作用

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方法了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值