JSP не возвращает HashMap (приходит null)

314
05 августа 2017, 03:21

В соответствии с этим (Не получается получить HashMap на контроллер в Spring MVC) ответом в который меня ткнули в предыдущем вопросе сделал свой пример. Дебагер показывает что "questionid" возвращает корректное значение а вот Map возвращает "null". Собственно как решить?

Мой контроллер:

@Controller
public class FlowController {
    @Autowired
    private TestInterfaceService testService;
    @Autowired
    private ResultCalcInterfaceService resCalc;
    @Autowired
    private UserService userService;
    @Autowired
    private SecurityService securityService;
    @Autowired
    private QuestionInterfaceService questionService;
    @Autowired
    private ResultInterfaceService resService;
    private static Map<Long, Boolean> listAnswers = new HashMap<Long, Boolean>();
    @RequestMapping(value = "/testPassing/{id}", method = RequestMethod.GET)
    public String testPassing(@PathVariable("id") long id, Model model) {
        Test test = this.testService.getFullTestById(id);
        model.addAttribute("ourTest", test);
        return "testPassing";
    }
    @RequestMapping(value = "/passing/{id}")
    public String startPassing(@PathVariable("id") long id, @RequestParam(required = false) Integer qId, Model model) {
        Test test = this.testService.getFullTestById(id);
        Date date = resService.addResult(test, userService.findByUsername(securityService.getName()));
        model.addAttribute("passingTest", test);
        int pageSize = test.getQuestions().size();
        List<Question> questions = test.getQuestions();
        model.addAttribute("questionSize", test.getQuestions().size());
        SimpleDateFormat formatter = new SimpleDateFormat("MMM d, yyyy HH:mm:ss", Locale.ENGLISH);
        String dateString = formatter.format(date);
        model.addAttribute("ourDate", dateString);
        model.addAttribute("Long", new Long(0));
        if (qId == null || qId < 1 || qId > pageSize) {
            qId = 1;
            model.addAttribute("questionId", questions.get(qId).getId());
            model.addAttribute("question", questions.get(qId));
            listAnswers = questionService.getAnswerList(questions.get(qId));
            UserAnswerForm userAnswerForm = new UserAnswerForm();
            userAnswerForm.setMap(listAnswers);
            System.out.println(userAnswerForm.getMap());
            model.addAttribute("userAnswerForm", userAnswerForm);
        } else if (qId <= pageSize) {
            model.addAttribute("questionId", qId);
            model.addAttribute("question", questions.get(qId - 1));
            listAnswers = questionService.getAnswerList(questions.get(qId - 1));
            // System.out.println(listAnswers.get(new Long(48)));
            UserAnswerForm userAnswerForm = new UserAnswerForm();
            // System.out.println(userAnswerForm.getList().get(new Long(48)));
            userAnswerForm.setMap(listAnswers);
            // System.out.println(userAnswerForm.getList().get(new Long(48)));
            model.addAttribute("userAnswerForm", userAnswerForm);
        }
        return "testPassing";
    }
    @RequestMapping(value = "/setAnswer", method = RequestMethod.POST)
    public String setAnswer(@ModelAttribute("userAnswerForm") UserAnswerForm userAnswerForm, Model model) {
        Question question = questionService.getQuestionById(userAnswerForm.getQuestionid());
        System.out.println(userAnswerForm.getMap().get(new Long(48)));
        Map<Long, Boolean> listAnswers2 = userAnswerForm.getMap();
        resCalc.setAnswer(userService.findByUsername(securityService.getName()), question, listAnswers2);
        Test test = question.getqTest();
        return "redirect:/passing/" + test.getId();
    }
}

Мой jsp:

<form:form method="post"
    action="${pageContext.request.contextPath}/setAnswer"
    modelAttribute="userAnswerForm">
    <input type="hidden" id="questionid" name="questionid"
        value="${question.id}" />
    <c:forEach items="${userAnswerForm.map}" var="item">
        <label>${item.key}</label>
        <input type="checkbox" name="map['${item.key}']"
            value="${item.value}">
        <br>
    </c:forEach>
    <input type="submit" value="Отправить">
</form:form>

Класс ЮзерФормы:

public class UserAnswerForm {
    private Map<Long, Boolean> map = new HashMap<Long, Boolean>();
    private long questionid;
    public long getQuestionid() {
        return questionid;
    }
    public void setQuestionid(long questionid) {
        this.questionid = questionid;
    }
    public Map<Long, Boolean> getMap() {
        return map;
    }
    public void setMap(Map<Long, Boolean> list) {
        this.map = list;
    }
}
READ ALSO
Узнать состояние клавиатуры в Lollipop

Узнать состояние клавиатуры в Lollipop

Так получилось, что InputMethodManager не хранит в себе текущее состояние клавиатуры, под "состояние" подразумевается видна или не видна системная...

335
Ошибка при повторной покупке монет

Ошибка при повторной покупке монет

У меня имеется список с разными количествами монетТипа этого:

326
Закрепить позицию в ScrollView

Закрепить позицию в ScrollView

Возможно ли как то чтобы в разметке, содержащую ScrollView сделать так чтобы он не пролистывался вниз, дело в том что видимо какой то баг, при переходе...

271
Почему не считывает double переменные с консоли?

Почему не считывает double переменные с консоли?

С консоли нужно считать переменную типа double, затем умножить ее на 6, округлить в меньшую сторону, результат поместить в переменную типа int и вывести...

330