jfinal框架问题小结
问题1:页面访问404报错
原因:1访问路径不对,或者是路径配置不对
解决方法:1检查配置文件配置的路径是否正确,同时检查配置文件配置的方法里面渲染的页面名字是否正确
2配置文件里设置的方法类里,没有index方法,jfinal里面每个方法里都必须要有index方法,否则报404错误
问题2:控制器接收到jsp发送过来的数据后,想直接用model类映射数据库保存,但是发现保存的数据是空的
原因:jfinal框架的model和bean类文件是不同的,bean文件是实体类文件,相当于是实体类容器,存储数据的,而model类是映射数据的类,没有bean类的存储功能,这就导致了用model类保存数据的时候,数据丢失了
解决方法:在model类里面添加实体类属性定义,并且添加set和get属性,同时,在所有的set属性里添加一行代码set("",xx);列如:
这样,model类就可以当bean类使用了,当然,也可以改用bean类去存储数据,然后用dao保存到数据库
问题3:当jsp页面有增加的操作时,一般会有null的数据发送给后台,这样处理起来比较麻烦
原因:因为jsp发送过来的是一串字符串,如果直接用方法转换成json对象会报错,这里可以用replace直接全部替换成空字符串,但是,又牵涉到不服数据为整形的情况。jsp数据接收处理,有时候,jsp发送过来的数据是[{},{}]的,或者直接是{},这样,就要用不同的类去处理了
解决方法:data.replace("null", "\"\"");先将null替换成空子串,然后转换成json列表JSONArray jsonObject = JSONArray.fromObject(json);,然后转换成Collection集合,迭代后,转换成model对象保存,当然,model必须有bean属性,Staff staf=(Staff) JSONObject.toBean(jsonObj,Staff.class);这样,json对象就转换成model-bean了,现在直接用model的save方法就可以保存到数据库了,这里,在转换成model-bean之前,要首先判断集合里面的整形数据,一般不会很多,只能逐个判断,如果等于""或者null,移除掉if("".equals(jsonObj.get("id"))){
问题5:页面跳转,双击或者单击打开详细页面
跳转方法:var link = '${basePath}runqian/jsp/teamEvaluation/EvaluationInfo.jsp?id=' + row.ID+'&flowId='+row.EVALUATIONPHASE+'&type=search';
原因:1访问路径不对,或者是路径配置不对
解决方法:1检查配置文件配置的路径是否正确,同时检查配置文件配置的方法里面渲染的页面名字是否正确
2配置文件里设置的方法类里,没有index方法,jfinal里面每个方法里都必须要有index方法,否则报404错误
问题2:控制器接收到jsp发送过来的数据后,想直接用model类映射数据库保存,但是发现保存的数据是空的
原因:jfinal框架的model和bean类文件是不同的,bean文件是实体类文件,相当于是实体类容器,存储数据的,而model类是映射数据的类,没有bean类的存储功能,这就导致了用model类保存数据的时候,数据丢失了
解决方法:在model类里面添加实体类属性定义,并且添加set和get属性,同时,在所有的set属性里添加一行代码set("",xx);列如:
public void setId(int id) {
set("id", id);
this.id = id;
}这样,model类就可以当bean类使用了,当然,也可以改用bean类去存储数据,然后用dao保存到数据库
问题3:当jsp页面有增加的操作时,一般会有null的数据发送给后台,这样处理起来比较麻烦
原因:因为jsp发送过来的是一串字符串,如果直接用方法转换成json对象会报错,这里可以用replace直接全部替换成空字符串,但是,又牵涉到不服数据为整形的情况。jsp数据接收处理,有时候,jsp发送过来的数据是[{},{}]的,或者直接是{},这样,就要用不同的类去处理了
解决方法:data.replace("null", "\"\"");先将null替换成空子串,然后转换成json列表JSONArray jsonObject = JSONArray.fromObject(json);,然后转换成Collection集合,迭代后,转换成model对象保存,当然,model必须有bean属性,Staff staf=(Staff) JSONObject.toBean(jsonObj,Staff.class);这样,json对象就转换成model-bean了,现在直接用model的save方法就可以保存到数据库了,这里,在转换成model-bean之前,要首先判断集合里面的整形数据,一般不会很多,只能逐个判断,如果等于""或者null,移除掉if("".equals(jsonObj.get("id"))){
jsonObj.remove("id");
}
问题4:实现编辑弹框时,数据不能反显弹框
原因:数据格式不对
解决方法:var row = grid.getSelected();
问题4:实现编辑弹框时,数据不能反显弹框
原因:数据格式不对
解决方法:var row = grid.getSelected();
var json = mini.encode(row);
if (row) {
mini.open({
url : "<%=basePath%>datagrid/gridIndex",
title : "编辑员工",
width : 600,
height : 400,
onload : function() {
var iframe = this.getIFrameEl();
var data = {
action : "edit",
id : row.id,
data:json
};
iframe.contentWindow.SetData(data);
},
ondestroy : function(action) {
grid.reload();
}
});
主页面传送过来的是经过mini序列号后的json字串, 所以,子页面接收到数据后,先克隆数据,然后反序列化转为json对象,然后用setData方法即可反显数据
//跨页面传递的数据对象,克隆后才可以安全使用
最后的form是组件的对象,通过mini.get()获取//跨页面传递的数据对象,克隆后才可以安全使用
data = mini.clone(data);
var json = mini.decode(data.data);//反序列化成对象
var positionCombo = mini.getbyName("position");
positionCombo.load("<%=basePath%>datagrid/GetPosition");
form.setData(json); 问题5:页面跳转,双击或者单击打开详细页面
跳转方法:var link = '${basePath}runqian/jsp/teamEvaluation/EvaluationInfo.jsp?id=' + row.ID+'&flowId='+row.EVALUATIONPHASE+'&type=search';
openPage({link:link,target:"tab",text:"评价详细"});
这里是一般的跳转,要加载jsp的路径和文件名,但是,本人比较喜欢钻牛角尖,不喜欢用这种跳转方法,于是,找了资料, 改成jfinal框架通用的方法加载:
window.location.href="<%=basePath%>datagrid/detailIndex";
哪个方法比较好我也说不清楚,看实际情况,本人比较喜欢第二个,但是, window.location.href不知道有没有bug,有待测试
问题6:同样的数据类型,下拉选择按钮能实现,树形结构不能实现
原因:jfinal框架的树不识别列表里的对象字典,只能识别单纯的字典,而下拉选择按钮则可以解析对象字典
解决方法:将数据库查询出来的对象字典转换成hashmap字典, 然后放到列表里面,传送给树显示,这里树的子树显示方法是pid标志父节点[
这里是一般的跳转,要加载jsp的路径和文件名,但是,本人比较喜欢钻牛角尖,不喜欢用这种跳转方法,于是,找了资料, 改成jfinal框架通用的方法加载:
window.location.href="<%=basePath%>datagrid/detailIndex";
哪个方法比较好我也说不清楚,看实际情况,本人比较喜欢第二个,但是, window.location.href不知道有没有bug,有待测试
问题6:同样的数据类型,下拉选择按钮能实现,树形结构不能实现
原因:jfinal框架的树不识别列表里的对象字典,只能识别单纯的字典,而下拉选择按钮则可以解析对象字典
解决方法:将数据库查询出来的对象字典转换成hashmap字典, 然后放到列表里面,传送给树显示,这里树的子树显示方法是pid标志父节点[
{"name":"行政部", "id":"xz", expanded: true},
{"name":"人事部", "id":"rs", "pid": "xz"},
{"name":"财务部","id":"cw", "pid": "xz"},
{"name":"业务部", "id":"yw", expanded: true},
{"name":"市场销售部", "id":"sc", "pid": "yw"},
{"name":"技术部", "id":"js", "pid": "yw"}
]