最近做的一个项目,遇到的问题及其总结。

项目用的是ssh+maven管理。后台的前端用的是datatables,前台前端是其他小伙伴h5写的,讲真,写的挺烂。

需求:后台管理问卷,三种问卷,计分,统计,投票。

计分类型支持单选多选,单选时可以通过选项跳入自定义的下一题,多选时只能进入下一题,计分类型独特的一点是有每一个选项的分值;

统计类型是在计分类型的基础上排除了分值新增了填空及其他选项(比如三个选项出题者设置了可以选择其他,则答卷人是可以选择其他选项来自己书写的,在完成后,发现设计数据库表时有问题,其他选项应该也设置成一个选项);

投票类型最简单,只有一题,可多选可单选可以选其他。

 

先总结一下出现的问题及解决方案。

survey-----suerveyQuestion-----suerveyOption三个表,表关联。

1.公司不允许真实删除记录,所以所有的删除功能都改为了修改功能,即在实体类后加delFlag(1删除,0没删除)。

json解析多对一的表会出现循环解析从而导致死循环。如果在getSurveyQuestionList()方法上添加@Transient,在利用网上的代码是没问题的,但是在解析时会将delflag=0和1的都解析出来。

重写getter方法,注意,不要在getSurveyQuestionList()这个基础上改,而是新建一个属性改,后期用新建的这个属性。详见代码:

 1 private List<SurveyQuestion> questionList;
 2 
 3 //取消数据库绑定,因为json解析需要取消关联,所以无法排除deleteflag标识
 4 @Transient
 5 @OrderBy(clause = "serialNumber asc")
 6 public List<SurveyQuestion> getQuestionList() {
 7 List<SurveyQuestion> list=new ArrayList<SurveyQuestion>();
 8 if(surveyQuestionList!=null && surveyQuestionList.size()>0){
 9 for(int i=0;i<surveyQuestionList.size();i++){
10 if(!surveyQuestionList.get(i).getDeleteFlag()){
11 list.add(surveyQuestionList.get(i));
12 }
13 }
14 }
15 return list;
16 }
17 
18 public void setQuestionList(List<SurveyQuestion> questionList) {
19 this.questionList = questionList;
20 }
View Code

然后解析的时候,见下:

1 Survey surveyFromSql=super.getSurveyService().getSurvey(surveyId);
2 //这个是从数据库取的数据,自行判断
3 
4 //按需求解析实体类,解除绑定
5                     JsonConfig cfg = new JsonConfig();
6                     cfg.registerJsonValueProcessor(Date.class, new JsonDateValueProcessor());//设置默认时间格式
7                     cfg.setExcludes(new String[]{"handler","hibernateLazyInitializer"});
8                     cfg.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
9                     JSONObject tmp = JSONObject.fromObject(surveyFromSql,cfg);
View Code

2.推荐使用

运用if--else if时最后要加入else判断不存在的情况,在撸码的时候还真存在所有的if没有判断的情况,避免找半天都没找到哪里有问题。

运用的有spring等框架,那么可以用其内部的一些源码,比如Assert,logger等。

能用一句sql,hql解决的绝不用两句。

前期可以不校验空值,但总结的时候必选用Assert校验。

3.前端传参到后台的时候,不支持数组里面套用数组,[[1,2,3],[4,5,6],[7,8,9]]类似于这种。

 起初我是将1~9都放在字符串里用逗号隔开然后后台解析,发现真的是麻烦,解决:

1 var answer=new Array();
2 
3 
4 answer[i]={'questionId':questionId,'questionType':type2,'questionName':questionName,'optionId':optionId,'optionName':optionName,"txt":txt};
5 
6 
7 var data={'surveyType':2,'surveyId':surveyId,'title':surveyTitle,'content':JSON.stringify(answer).toString(),'name':name,'mobile':mobile};
8 
9 //data是ajax的参数
View Code

4.其他的都是一些逻辑问题,没什么好总结的。

posted on 2018-01-30 15:04  老板我要两份黄焖鸡  阅读(151)  评论(0编辑  收藏  举报