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表示尚未關閉,在列表中就可以顯示出來。
比較簡單,略。