这是在做项目WMS的时候项目积累:出库单在复核完成后,删除司机(司机只要被用过的话就做的逻辑删除,没有被用过的话就做的物理删除。),删除成功后再打开订单的历史详情查看,出现页面报错!!
错误原因:在出库系统里面调用的查找静态资源的接口是 getDriverList() 在这个接口里面,我强制的设置了只能查找到状态值为state=1的数据。所以造成页面加载出错了。
如果调用getDriverById()这个方法的话就不会报错了。
sql 报错:
Caused by: java.sql.SQLIntegrityConstraintViolationException: Duplicate entry ‘HEB4222222‘ for key ‘UNIQUE_CODE‘
错误原因:数据库表里面的字段加了唯一索引,而在新增时这个值重复了,所以就会报错。
limit ${startRow},${pageSize}
从我静态资源过去,是map转换过去的,所以会把字符串自动转换成数字,所以在sql里面用startRow != "" 用这个去判断虽然不会报错,但是是通不过的,不会执行下面的limit语句。
parseInt(finished) >parseInt(finishedfinished)
js里面var 变量的比较,如果是后台传过来的数据,数字最好转成int再比较
直接比较的话会有错误的!(不是比较会有错误,而是通过后台传过来的值是字符串【即使是数字但是其数据类型不一定是整数】,所以可能比较会出现错误)
今天调用接口遇到问题:
接口为null
没有调到:原因配置dubbo没有配置完。
后来数据连接出错:原因数据库的配置有问题
接口数据获取有问题:
问题描述:由于接口里面是连表,对于一些继承的属性没有放入值。
修改,把继承的值进行实际定义。
dubbo用2.5.4 不是2.5.3版本
数据库移库到10.28.6.50 3306 root 123456
需要修改的数据有:config.properties
wms-staticresource 里面的 pom.xml文件里面的数据库配置
JSON.parseArray(JsonKit.toJson(dao.find(DbUtil.parseSql(sqlName, paras), DbUtil.getParas(sqlName, paras))), clazz);
JSON.parseArray("{{name:123},{name:456}}", User.class);//将json字符串,转换成Java对象数组
这里转化就有问题了:
JSON.parseArray(JsonKit.toJson(dao.find(DbUtil.parseSql(sqlName, paras), DbUtil.getParas(sqlName, paras))), clazz);
JsonKit.toJson(dao.find(DbUtil.parseSql(sqlName, paras), DbUtil.getParas(sqlName, paras)))这里面转化的就是把结果转化成的json对象,这里的json字段就和数据库里面的字段一样的,没有进行转换。是带有下划线的。所以如果clazz是domain里面的javabean就会出现值的匹配出现错误。
但是如果是model里面的对象就不会出现字段的匹配错误,原因是,jfinal里面进行过映射了。
id,
login_name as loginName,
real_name as realName,
department,
type,
state,
created,
modified
需要修改的地方有sqlMap里面,如上
其次修改页面的获取值的字段方法,不再有向数据库那样的下划线字段login_name,,都是java规范的命名字段loginName
修改model模型里面的通过id获得对象的id字段写法,比如:area_id,修改成areaId
所以sqlMap可以精简代码的暂时没用了。
model
sqlMap
页面
list
用到queryByCondition方法的需要大写,其他同原来的
http://localhost:8085/test/lineList
把localhost后面的接口中间的冒号,用成了中文的冒号,所以在访问的时候就报错了。
list查询也之前无法回显原因:在if判断比较时出错,不同类型的比较是不会成功的。
3、路径统一 :staticresource ----> ${contextPath}
问题解决:
没有再BaseController 里面配置下面的:
context.put("contextPath", ConfigUtils.getProperty("dubbo.jetty.contextpath"));
测试出现的bug:
href="/staticresource/warehouse/skipAdd"
改成
href="warehouse/skipAdd"
在修改成功后再查看就会报错,路径出错,路径里面多了路径 /warehouse
error : com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table ‘dili_wms.goods2wearehouse‘ doesn‘t exist
在JFinal 里面的配置,有一个是要求和数据库名字一样的。
arp.addMapping("goods_2_storage_location", Goods2storageLocation.class);
在测试静态资源的一些修改和新增功能时对于乱写的测试数据,有些可能程序会报错,主要意思是某些字段的类型错误怎么的,造成这个错误的原因可能是因为在制造假数据时无法转换成数据库里面对应字段的类型。比如:测试数据为string,而数据库里面要求的对应字段是int类型的。
不允许id传空,不然会报异常
Assert.notNull(dataSource, "dataSource cannot be null");
《!!bug!!》com.alibaba.fastjson.JSONException: can not cast to int, value : true
所以在json转换时就报上面的错误:JSON.parseArray(JsonKit.toJson(dao.find(DbUtil.parseSql(sqlName, paras), DbUtil.getParas(sqlName, paras))), clazz);
解决原因:
MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1),
MySQL里有四个常量:true,false,TRUE,FALSE,它们分别代表1,0,1,0,
把tinyint的大小修改为2bit。
错误:java.lang.NullPointerException
at com.jfinal.plugin.activerecord.Model.find(Model.java:529)
在测试时其他地方都没有抛出错误,到这里时就出现错误了:
Config config = getConfig();
Connection conn = null;
try {
conn = config.getConnection();
return find(conn, sql, paras);
} catch (Exception e) {
throw new ActiveRecordException(e);
问题解决:没有再JFinalConfig里面定义映射
me.add("/goods", GoodsController.class,"/");
arp.addMapping("goods", Goods.class);
因为定义了映射就相当于不用写JavaBean了,所以这也是JFinal里面不用写JavaBean的原因,这里的映射它会把数据库里面的字段对应进行匹配。
而我这里刚好没有进行映射,那么在我的程序里面用到Dao层数据时就会报错。
//父节点nav对应Nav类,childNav节点对应ChildNav类,有多个childNav节点,这里需转换到集合中
//没有这句的话会报错误“Caused by: //com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter$DuplicateFieldException: //Duplicate field childNav”
xstream.addImplicitCollection(ChildNav.class, "childNav");
遇到的奇怪问题:
对于xml里面父节点和子节点相同的属性值,如果父节点和子节点分别抽象成一个类出来,各自不存在继承关系,各自声明相同的那个属性值,程序就会报错。
但是如果用子类去继承父类,就不用去声明那个相同的属性,直接从父类哪里继承到,那么程序就不会报错。
一直没有找到为什么会出现这个问题。
在项目的搭建过程中,遇到了很多问题。
1、首先是配置文件的报错spring的相关bean的引入报错,
处理方法:在pom文件里面正确引入相关spring的依赖。
2、在配置文件里面有些引入的bean没有报错了但是里面的属性name
即name里面的值报错。cannt resolved......
可以去bean里面的class类里面查看,可能是类里面还报错呢。
3、找不到jar包