首页 / JAVA / java开发遇到的问题总结(四)
java开发遇到的问题总结(四)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java开发遇到的问题总结(四),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9034字,纯文字阅读大概需要13分钟。
内容图文
![java开发遇到的问题总结(四)](/upload/InfoBanner/zyjiaocheng/1114/df052a0515c0498481ab11ddb3019708.jpg)
26 、判断各种类型的空,不过要加包 import org.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 方法,具体怎么转换的代码
public static 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, new TypeToken<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 中写具体的排序方法,不过首先把合计提取出来,使其不参与排序,一直在最下方
boolean flat= 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 // 重写此方法,使其改为适合此情况的方法
public int 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){
return function (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);
return result;
} 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);
return sortStr;
}
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 中会有 private static final long serialVersionUID =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方法:
public MonitorChangeBean getModel() {
return monitorChangeBean ;
}
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);
return SUCCESS ;
}
在 struts-xml 中配置:
< action name = "getWeekDate" class = "monitorChangeAction" method = "queryWeekDate" >
< result name = "success" type = "json" >
< param name = "root" > data </ param >
</ result >
</ action >
40 、 eval 函数
success: function (response, options) {
var res = 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 中的 <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
原文:http://haoxiaoli.blog.51cto.com/8691383/1702186
内容总结
以上是互联网集市为您收集整理的java开发遇到的问题总结(四)全部内容,希望文章能够帮你解决java开发遇到的问题总结(四)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。