Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java =================================================================== diff -u -r5c56f99b5c68772f16031bfcadc8ea326e4b1787 -r634568fe06e9f4d0524d8a8a34b1b678f0077d33 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 5c56f99b5c68772f16031bfcadc8ea326e4b1787) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/service/IAssessmentService.java (.../IAssessmentService.java) (revision 634568fe06e9f4d0524d8a8a34b1b678f0077d33) @@ -190,10 +190,31 @@ void storeUserAnswers(Long assessmentUid, Long userId, ArrayList> pagedQuestions, boolean isAutosave); + /** + * Return the latest result (it can be unfinished). + * + * @param assessmentUid + * @param userId + * @return + */ AssessmentResult getLastAssessmentResult(Long assessmentUid, Long userId); + /** + * Return the latest result (only finished ones). + * + * @param assessmentUid + * @param userId + * @return + */ AssessmentResult getLastFinishedAssessmentResult(Long assessmentUid, Long userId); + /** + * Return number of finished results. I.e. don't count the last not-yet-finished result (it can be autosave one). + * + * @param assessmentUid + * @param userId + * @return + */ int getAssessmentResultCount(Long assessmentUid, Long userId); List getAssessmentQuestionResultList(Long assessmentUid, Long userId, Long questionUid); Index: lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java =================================================================== diff -u -r7f2517403c4db0b415c16de3231c1e8befc370a9 -r634568fe06e9f4d0524d8a8a34b1b678f0077d33 --- lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 7f2517403c4db0b415c16de3231c1e8befc370a9) +++ lams_tool_assessment/src/java/org/lamsfoundation/lams/tool/assessment/web/action/LearningAction.java (.../LearningAction.java) (revision 634568fe06e9f4d0524d8a8a34b1b678f0077d33) @@ -326,9 +326,7 @@ sessionMap.put(AssessmentConstants.ATTR_ASSESSMENT, assessment); // loadupLastAttempt for display purpose - if (dbResultCount > 0) { - loadupLastAttempt(sessionMap); - } + loadupLastAttempt(sessionMap); //check if need to display results page if ((dbResultCount > 0) && finishedLock) { @@ -716,16 +714,22 @@ } private void loadupLastAttempt(SessionMap sessionMap){ + IAssessmentService service = getAssessmentService(); + ArrayList> pagedQuestions = (ArrayList>) sessionMap .get(AssessmentConstants.ATTR_PAGED_QUESTIONS); Long assessmentUid = ((Assessment) sessionMap.get(AssessmentConstants.ATTR_ASSESSMENT)).getUid(); Long userId = ((AssessmentUser) sessionMap.get(AssessmentConstants.ATTR_USER)).getUserId(); - IAssessmentService service = getAssessmentService(); - AssessmentResult result = service.getLastAssessmentResult(assessmentUid,userId); + //get the latest result (it can be unfinished one) + AssessmentResult lastResult = service.getLastAssessmentResult(assessmentUid,userId); + //if there is no results yet - no action required + if (lastResult == null) { + return; + } for(LinkedHashSet questionsForOnePage : pagedQuestions) { for (AssessmentQuestion question : questionsForOnePage) { - for (AssessmentQuestionResult questionResult : result.getQuestionResults()) { + for (AssessmentQuestionResult questionResult : lastResult.getQuestionResults()) { if (question.getUid().equals(questionResult.getAssessmentQuestion().getUid())) { question.setAnswerBoolean(questionResult.getAnswerBoolean()); question.setAnswerFloat(questionResult.getAnswerFloat());