一、分析答案实体

  分析答案实体主要涉及到的还是设计上的问题,技术点几乎是没有的。首先需要确定一下答案的格式才能最终确定答案实体中需要有哪些属性。

  答案格式的设计是十分重要的,现设计格式如下:

  在表单中需要提供的信息有name值和value值,name值实际上只是用于回显和保存答案,对于保存答案来说只需要一个问题id就可以了,但是实际上对于矩阵式单选按钮来说,name的值就显得比较复杂了,显得比较复杂的原因是为了回显方便。但是在答案实体中需要保存的只有一个问题id而已。

  类型1-4问题的答案格式(单选、多选、带有其它项):

    如果是radio类型的或者checkbox类型的表单:name='q'+qid,value=问题的索引值,比如问题类型1,那么答案就是q1,这里不考虑查看已经做完的答案问题,假设一次性的提交。

    如果带有"其它"题目,那么首先使用chekbox类型的一个表单来确定是否有其它类型的选项,该值是boolean类型的,name='q'+qid,但是value值是固定的"other"

    如果带有其他类型的题目,那么还需要判断其它类型的题目是哪一种类型的,这里假设其他类型的题目有两种类型,一种是文本框类型,一种是下拉列表类型的。

    两种其他类型的答案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来标识是哪个调查。

  

二、删除问题、删除页面、删除调查

以上三个删除无论删除哪一个,首先一定能够确定的是一定要删除掉对应的所有答案。

删除问题:先删除答案,再删除问题

 public void deleteQuestion(Question question) {
String hql="delete from Answer a where a.questionId=?";
questionDao.batchEntityByHql(hql, question.getQuestionId()); hql="delete from Question q where q.questionId=?";
this.questionDao.batchEntityByHql(hql, question.getQuestionId());
}

删除页面:先删除答案,再删除问题,再删除页面

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());
}

删除调查:先删除答案,再删除问题,再删除页面,最后删除调查。

 public void deleteSurvey(Survey survey) {
survey=this.surveyDao.getEntityById(survey.getSurveyId());
String hql;
Set<Page>pages=survey.getPages();
for(Page page:pages){
Set<Question>questions=page.getQuestions();
//首先删除掉当前调查中的所有页面中的所有问题的答案
for(Question question:questions){
hql="delete from Answer a where a.questionId=?";
answerDao.batchEntityByHql(hql, question.getQuestionId());
}
//然后删除掉当前调查中的所有页面中的所有问题
hql="delete from Question where page.pageId=?";
questionDao.batchEntityByHql(hql, page.getPageId());
}
//然后删除掉当前调查中的所有页面
hql="delete from Page where survey.surveyId=?";
pageDao.batchEntityByHql(hql, survey.getSurveyId());
//最后删除掉Survey对象本身
hql="delete from Survey s where s.surveyId=?";
surveyDao.batchEntityByHql(hql, survey.getSurveyId());
}

三、清除调查,即删除掉自己参与的调查,略。

四、打开、关闭调查

  该功能能够影响参与调查的时候能够显示出哪些调查。这需要给Survey对象添加一个新的属性closed,如果该属性的值是true,表示该调查的状态是已经关闭的,在参与调查的列表中就不能够被显示出来,如果是false表示还没有关闭,在列表中就能够显示出来。

  比较简单,略。

【Java EE 学习 71 下】【数据采集系统第三天】【分析答案实体】【删除问题】【删除页面】【删除调查】【清除调查】【打开/关闭调查】的更多相关文章

  1. 【Java EE 学习 69 下】【数据采集系统第一天】【实体类分析和Base类书写】

    之前SSH框架已经搭建完毕,现在进行实体类的分析和Base类的书写.Base类是抽象类,专门用于继承. 一.实体类关系分析 既然是数据采集系统,首先调查实体(Survey)是一定要有的,一个调查有多个 ...

  2. 【Java EE 学习 74 下】【数据采集系统第六天】【使用Jfreechart的统计图实现】【将JFreechart整合到项目中】

    之前说了JFreechart的基本使用方法,包括生成饼图.柱状统计图和折线统计图的方法.现在需要将其整合到数据采集系统中根据调查结果生成三种不同的统计图. 一.统计模型的分析和设计 实现统计图显示的流 ...

  3. 【Java EE 学习 72 下】【数据采集系统第四天】【移动/复制页分析】【使用串行化技术实现深度复制】

    一.移动.复制页的逻辑实现 移动.复制页的功能是在设计调查页面的时候需要实现的功能.规则是如果在同一个调查中的话就是移动,如果是在不同调查中的就是复制. 无论是移动还是复制,都需要注意一个问题,那就是 ...

  4. 【Java EE 学习 70 下】【数据采集系统第二天】【Action中User注入】【设计调查页面】【Action中模型赋值问题】【编辑调查】

    一.Action中User注入问题 Action中可能会经常用到已经登陆的User对象,如果每次都从Session中拿会显得非常繁琐.可以想一种方法,当Action想要获取User对象的时候直接使用, ...

  5. 【Java EE 学习 67 下】【OA项目练习】【SSH整合JBPM工作流】【JBPM项目实战】

    一.SSH整合JBPM JBPM基础见http://www.cnblogs.com/kuangdaoyizhimei/p/4981551.html 现在将要实现SSH和JBPM的整合. 1.添加jar ...

  6. 【Java EE 学习 22 下】【单线程下载】【单线程断点下载】【多线程下载】

    一.文件下载简述 1.使用浏览器从网页上下载文件,Servlet需要增加一些响应头信息 (1)response.setContentType("application/force-downl ...

  7. 【Java EE 学习 32 下】【JQuery】【JQuey中的DOM操作】

    一.JQuery中的DOM操作. 什么是DOM:DOM是一中和浏览器.平台.语言无关的接口,使用该接口可以轻松访问页面中所有的标准组件.DOM简称文档对象模型,是Document Oject Mode ...

  8. 【Java EE 学习 77 下】【数据采集系统第九天】【使用spring实现答案水平分库】【未解决问题:分库查询问题】

    之前说过,如果一个数据库中要存储的数据量整体比较小,但是其中一个表存储的数据比较多,比如日志表,这时候就要考虑分表存储了:但是如果一个数据库整体存储的容量就比较大,该怎么办呢?这时候就需要考虑分库了, ...

  9. 【Java EE 学习 75 下】【数据采集系统第七天】【二进制运算实现权限管理】【使用反射初始化权限表】【权限捕获拦截器动态添加权限】

    一.使用反射动态添加权限 在该系统中,我使用struts2的时候非常规范,访问的Action的形式都是"ActionClassName_MethodName.action?参数列表" ...

随机推荐

  1. .NET开发人员值得关注的七个开源项目 .

    NET开发人员值得关注的七个开源项目 软近几年在.NET社区开源项目方面投入了相当多的时间和资源,不禁让原本对峙的开源社区阵营大吃一惊,从微软.NET社区中的反应来看,微软.NET开发阵营对开源工具的 ...

  2. 让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法

    首先需要确保你的HTML页面开始部分要有DOCTYPE声明.DOCTYPE告诉浏览器使用什么样的HTML或XHTML规范来解析HTML文档,具体会影响:对标记attributes .propertie ...

  3. Clang: Undefined symbols, but it is there using nm.

    https://stackoverflow.com/questions/36662920/xcode-clang-link-build-dynamic-framework-or-dylib-not-e ...

  4. 如何获得Webapp的根项目路径 即ServletContext.getRealPath() 的输入参数要以"/"开头

    ServletContext.getRealPath() 的输入参数要以"/"开头 2014-03-26 15:54 5738人阅读 评论(1) 收藏 举报 版权声明:本文为博主原 ...

  5. Struts2返回json格式数据踩坑记录

    事件起因 昨天提测修改冻结/解冻银行卡样式的功能,微姐测试过程中发现调用ajax请求耗时过长,今天来排查,发现浏览器请求/finance/ajax/freeze/ajaxGetShopLists时,对 ...

  6. 20155324王鸣宇对C语言课程回顾及对Java的展望

    # 第二次预备作业 你有什么技能比大多人(超过90%以上)更好? 针对这个技能的获取你有什么成功的经验? 与老师博客中的学习经验有什么共通之处? 我谦虚的说整个2015级五系英雄联盟这个游戏我最厉害( ...

  7. [Linux] Linux常用文本操作命令整理

    简单的总结一下常用的一些实用的Linux文本操作命令,包括wc(统计).cut(切分).sort(排序).uniq(去重).grep(查找).sed(替换.插入.删除).awk(文本分析). 1.统计 ...

  8. D3.js学习(四)

    上一节我们已经学习了线条样式和格栅的绘制,在这一节中我们将要根据之前绘制的线条对图表进行填充,首先来看一下我们的目标吧 在这个图表中,我们对位于线条下面的空间进行了填充,那么,如何改做到呢? 设置填充 ...

  9. MFC去掉标题栏

    在初始化的时候加入以下函数 //去掉标题栏 ModifyStyle(WS_CAPTION, NULL, SWP_DRAWFRAME );

  10. easyui Datagrid查询报错Uncaught TypeError:Cannot read property 'length' of undefined

    1.问题描述 easyui中datagrid执行loadData方法出现如下异常:Cannot read property 'length' of undefined 2.一开始怀疑是js或者页面的问 ...