Почему @RequestParam отсутствует

214
07 ноября 2018, 15:10

есть метод который вернет ответы с помощью id.

@RequestMapping(value = "/getAnswerByQuestionId",method = RequestMethod.GET)
public String getAnswerByQuestionId(ModelMap map,@RequestParam("id")int id){
    List<Answer> findAllBYQuestionId=answerRepository.findAllByQuestionId(id);
    map.addAttribute("findAllAnswersByQuestionId",findAllBYQuestionId);
    map.addAttribute("addAnswer",new Answer());
    return "answerResult";
}

этот метод идет в JSP сюда

<spring:form action="/addAnswer" method="post" enctype="multipart/form-data" modelAttribute="addAnswer">
<c:forEach items="${findAllAnswersByQuestionId}" var="name">
    ${name.text}
<input type="hidden" value="${name.id}" name="questionId">
</c:forEach>
    <spring:textarea path="text"></spring:textarea>
    <input type="file" name="pict">
    <input type="submit" value="add">
</spring:form>

на втором строке печатает результат. В этом JSP под результатом есть форма для добавлении ответа. Когда все ок - добавили ответ, данные идут сюда

@RequestMapping(value = "/addAnswer",method = RequestMethod.POST)
    public String addAnswer(@ModelAttribute("answer")Answer answer,@AuthenticationPrincipal UserDetails userDetails,@RequestParam("questionId")int id,@RequestParam("pict")MultipartFile[] files) throws IOException {
        File dir = new File(imageUploadPath);
        if (!dir.exists()) {
            dir.mkdir();
        }
        for (MultipartFile file : files) {
            String picName = System.currentTimeMillis() + "_" + file.getOriginalFilename();
            File picture = new File("D:\\bankSystem\\" + picName);
            file.transferTo(picture);
            answer.setImage(picName);
            answer.setUserUsername(userDetails.getUsername());
            answer.setQuestionId(id);
        }
        answerRepository.save(answer);
        return "redirect:/getAnswerByQuestionId";
    }

Здесь добавляется и идет обратно на этот метод getAnswerByQuestionId, чтобы пользователь добавил еще один ответ либо увидел его ответ. Проблема в том, что когда идет обратно на этот метод getAnswerByQuestionId возникает ошибка

request param id is not present

вот скажет, что не давали id, чтобы он смог печатать результат. Можно ли сделать так, чтобы не давать id и войти на этот JSP?

Answer 1

Параметр можно передать с помощью RedirectAttributes. Когда вы делаете перенаправление запроса, то необходимо чтобы требуемые параметры находились в url.

@RequestMapping(value = "/addAnswer",method = RequestMethod.POST)
public String addAnswer(@ModelAttribute("answer")Answer answer,
                        @AuthenticationPrincipal UserDetails userDetails,
                        @RequestParam("questionId")int id,
                        @RequestParam("pict")MultipartFile[] files,
                        RedirectAttributes redirectAttributes) throws IOException {
  ....
  redirectAttributes.addAttribute("id", id);
  return "redirect:/getAnswerByQuestionId";
}

Для более детального ознакомления см. документацию.

READ ALSO
Как создать массив с буквами кириллицы в Java?

Как создать массив с буквами кириллицы в Java?

При создании массива с русскими символами компилятор выдаёт такую ошибку(смизображение)

187
Java EE Glassfish ProgrammaticLogin. &ldquo;No LoginModules configured for default&rdquo;

Java EE Glassfish ProgrammaticLogin. “No LoginModules configured for default”

Доброго всем времени суток! Столкнулся с ошибкой "No LoginModules configured for default" при попытке вызвать @Remote EJB метод с проверкой роли пользователяАвторизации...

186
Регулярка для номера телефона

Регулярка для номера телефона

Всем привет Помогите написать регулярку для номера телефона С такой вот маской

186