JDK1.7+Tomcat7.0+Eclipse+SSM
当我点击""查询""按钮后,页面报错:400,但是Eclipse的控制台没有报异常!!!!
参考
(1)HTTP 400 错误 - 请求无效 (Bad request)
(2)400(HTTP状态码)_百度百科
扩展:404页面
原因,主要跟Spring MVC、整型类型有关(懂还是不懂,朋友,都可以留言沟通哦~)
1、我的“查询”相关的代码
我的EmpVo的age为int类型:
我的EmpService,实际上就是EmpDAO接口类的实现类,所以直接看EmpDAO接口类与EmpDAO配置(主要看listEmp_taskByIF方法,因为我的400是在“”查询“”时出现的异常!!!):
我的list方法:
我的EmpList页面:
EmpList页面使用了empList、edList:
浏览器显示:
2.为什么会报400
若我只查询“部门”或“员工名”等等 或者 查询“部门和员工名”或其他 或者 不查询,反正就是不查询“年龄”,当点击“查询”按钮时,就会报400,从此可知,错误就是与“年龄age”有关,
每次“登录Login“页面转向”员工列表EmpList”页面过程中,即,从login.jsp到EmpController.jsp的list,再到EmpList.jsp过程中,EmpController的list()的参数emp里的属性都有默认值:age、empId有(int类型)默认值“0”,而String对应的变量默认为“null”,但是 到 转入EmpList页面后,在"查询"模块中,年龄的输入框里没有任何值,即,不是:图中显示的那样【当“新增”时,页面里年龄输入框确实会出现"年龄:0"!!!因为age是int类型,加上init()初始化方法给了emp属性,且input里已经写了value=${emp.age}】,但却是,,你也许说,本来就是,不是吗?~也算对吧,只要没有了“value=${emp.age}”,年龄对应的输入框就不会出现"0"!!!
好的,说完这个,我接着做讲的是:“年龄”输入框没有输入什么值,当你点击“查询”时,页面或Spring MVC 也不会处理,不会将“没有值的age赋‘0’值”,所以传到后台,age没有值,连null或空格都不是,导致报400
3、解决
①将age的int类型改为Integer类型。
【将EmpVo里的age改为Integer类型,EmpDAO配置中也改条件,因为Integer默认值为null,int默认值才为0】
(1) Integer与int的种种比较你知道多少?
(2)java面试题之int和Integer的区别
【两篇文章的 并 集 就是我想分享的】
②在EmpList页面中加上JS代码,控制age的值,为‘’这样的空值时 则赋‘0’值。
推荐:【属性类型问题,不一定根据数据表的字段类型来设置Javabean的属性类型,实际上要根据SQL语句获取的字段它对应的类型来设置Javabean的属性类型,如(可忽略):xxx字段在数据库表示Number类型,但是SQL语句中使用了case...when...then...else...end,将别名为xxx的类型改为varchar类型的值,则Javabean中xxx属性的类型为String】
java.lang.reflect.UndeclaredThrowableException【java.sql.SQLException: 无法转换为内部表示】