1、分析答案实体前端
分析答案实体主要涉及到的仍是设计上的问题,技术点几乎是没有的。首先须要肯定一下答案的格式才能最终肯定答案实体中须要有哪些属性。服务器
答案格式的设计是十分重要的,现设计格式以下:this
在表单中须要提供的信息有name值和value值,name值实际上只是用于回显和保存答案,对于保存答案来讲只须要一个问题id就能够了,可是实际上对于矩阵式单选按钮来讲,name的值就显得比较复杂了,显得比较复杂的缘由是为了回显方便。可是在答案实体中须要保存的只有一个问题id而已。spa
类型1-4问题的答案格式(单选、多选、带有其它项):设计
若是是radio类型的或者checkbox类型的表单:name='q'+qid,value=问题的索引值,好比问题类型1,那么答案就是q1,这里不考虑查看已经作完的答案问题,假设一次性的提交。code
若是带有"其它"题目,那么首先使用chekbox类型的一个表单来肯定是否有其它类型的选项,该值是boolean类型的,name='q'+qid,可是value值是固定的"other"对象
若是带有其余类型的题目,那么还须要判断其它类型的题目是哪种类型的,这里假设其余类型的题目有两种类型,一种是文本框类型,一种是下拉列表类型的。blog
两种其余类型的答案name=‘q’+qid+'other',对于恰年一种文本框类型的答案来讲,问题的答案保存只是一个字符串,对于后者来讲也是一个问题的索引值。 索引
类型5问题的答案(下拉列表):name='q'+qid,value=问题的索引值;字符串
类型6问题的答案(文本框):name='q'+qid,value=填写的字符串;
类型7问题的答案(矩阵式单选按钮):name='q'+qid+'_'+行坐标+'_'+列坐标,value=行坐标+'_'+纵坐标。
类型8问题的答案(矩阵式复选框按钮):name='q'+qid,value='行坐标'+'_'+纵坐标。
类型9问题的答案(矩阵式下拉列表):name='q'+qid,value=行坐标+'_'+纵坐标+'_'+下拉列表框的索引值。
总结一下,答案的实体须要保存的答案主要有两个一个是答案的索引值字符串answerIndexs,一个是带有其它答案的otherAnswer用来保存其它答案。再加上一个答题时间answerTime,这里须要注意一下,是否须要关联到question对象的问题。首先须要根据Question获取该question的全部答案吗?必定会有这种需求,可是若是使用关联关系获得全部答案的方法是十分愚蠢的,由于参与调查的人很是多,极可能有几万或者几十万,若是将Question对象随随便的的就传递到前端页面,大量的数据(答案)就会保存到Session,服务器很快就会瘫痪因此Quesiton必定不能关联到Answers对象。可是这里还须要Answer对象和Question对象有联系,不然单纯的保存答案是没有任何意义的。因此咱们给Answer对象添加一个questionId属性用来标识是哪道题目。另外为了查询方便,咱们使用一个冗余字段surveyId来标识是哪一个调查。
2、删除问题、删除页面、删除调查
以上三个删除不管删除哪个,首先必定可以肯定的是必定要删除掉对应的全部答案。
删除问题:先删除答案,再删除问题
1 public void deleteQuestion(Question question) { 2 String hql="delete from Answer a where a.questionId=?"; 3 questionDao.batchEntityByHql(hql, question.getQuestionId()); 4 5 hql="delete from Question q where q.questionId=?"; 6 this.questionDao.batchEntityByHql(hql, question.getQuestionId()); 7 }
删除页面:先删除答案,再删除问题,再删除页面
public void deletePage(Page page) { page=pageDao.getEntityById(page.getPageId()); Set<Question> questions=page.getQuestions(); //首先删除掉页面上的全部问题和答案 String hql="delete from Answer a where a.questionId=?"; for(Question question:questions){ answerDao.batchEntityByHql(hql, question.getQuestionId()); } //删除掉全部问题 hql="delete from Question q where page.pageId=?"; questionDao.batchEntityByHql(hql, page.getPageId()); //删除掉当前页面 hql="delete from Page p where p.pageId=?"; pageDao.batchEntityByHql(hql, page.getPageId()); }
删除调查:先删除答案,再删除问题,再删除页面,最后删除调查。
1 public void deleteSurvey(Survey survey) { 2 survey=this.surveyDao.getEntityById(survey.getSurveyId()); 3 String hql; 4 Set<Page>pages=survey.getPages(); 5 for(Page page:pages){ 6 Set<Question>questions=page.getQuestions(); 7 //首先删除掉当前调查中的全部页面中的全部问题的答案 8 for(Question question:questions){ 9 hql="delete from Answer a where a.questionId=?"; 10 answerDao.batchEntityByHql(hql, question.getQuestionId()); 11 } 12 //而后删除掉当前调查中的全部页面中的全部问题 13 hql="delete from Question where page.pageId=?"; 14 questionDao.batchEntityByHql(hql, page.getPageId()); 15 } 16 //而后删除掉当前调查中的全部页面 17 hql="delete from Page where survey.surveyId=?"; 18 pageDao.batchEntityByHql(hql, survey.getSurveyId()); 19 //最后删除掉Survey对象自己 20 hql="delete from Survey s where s.surveyId=?"; 21 surveyDao.batchEntityByHql(hql, survey.getSurveyId()); 22 }
3、清除调查,即删除掉本身参与的调查,略。
4、打开、关闭调查
该功能可以影响参与调查的时候可以显示出哪些调查。这须要给Survey对象添加一个新的属性closed,若是该属性的值是true,表示该调查的状态是已经关闭的,在参与调查的列表中就不可以被显示出来,若是是false表示尚未关闭,在列表中就可以显示出来。
比较简单,略。