2016-12-22 2 views
1

Я пытаюсь разрешить ошибку при отправке формы с пустым вводом.Как сохранить параметры запроса после перенаправления?

Это мой Methode:

@RequestMapping(value = "/modifier.html", method = RequestMethod.POST) 
public String modifier(ModelMap map, @ModelAttribute("FormObject") FormObject formObject, BindingResult result, HttpServletRequest req) { 

    formObject.setModif(true); 
    String idParam = req.getParameter("idTypeOuverture"); 

    if (result.hasErrors()) { 
     return "redirect:/gestion.html?section=Configuration&panel=4&ouvrir=modifier"; 
    } else { 
     //Instructions 
} 

При наличии ошибок (пустой вход), контроллер перенаправляет на эту ссылку, чтобы сообщить пользователю, чтобы исправить ошибки. Проблема заключается в том, когда я проверить параметры здесь они выглядят правильно (номер, имя ...), но идентификатор становится нулевым следующим способом:

@Override 
public ModelAndView dispatcher(HttpServletRequest request, HttpServletResponse response) throws RorException { 

    Map<String, Object> myModel = (Map<String, Object>) request.getAttribute(EnumParam.R_MY_MODEL.getKey()); 

    Enumeration<?> keys = request.getParameterNames(); 
    while (keys.hasMoreElements()) { 
     String paramName = (String) keys.nextElement(); 
     String value = request.getParameter(paramName); 
     myModel.put(paramName, value); 
    } 

    GlobalSession globalSession = (GlobalSession) getApplicationContext().getBean(Utilities.GLOBALSESSION_BEAN_REF); 
    myModel.put("module", globalSession.getModule().getKeyMessage()); 
    String section = request.getParameter("section"); 

    // This instruction returns null 
    String idForm = request.getParameter("id"); 
    id = Integer.parseInt(idForm); 
    // This instruction returns NumberFormatException 
    ObjectForm of = getForm(id); 
    // ... 
} 

Ну, я не знаю, почему параметр идентификатора изменен после redericting ? у тебя есть идеи? Я попытался перефразировать параметры в первом методе, но все же получил тот же NFE.

Заранее спасибо.

Спасибо

+1

вы получаете нулевой, потому что перенаправление gestion.html не содержит 'id' параметр – user1516873

ответ

3

Параметр запроса предназначен только для одного запроса. Вы делаете перенаправление, это означает, что вы делаете новый «запрос».

Вы должны добавить его в перенаправлении:

return "redirect:/gestion.html?section=Configuration&panel=4&ouvrir=modifier&idTypeOuverture="+idParam;

3

Хотя предыдущий ответ принят, я добавляю этот ответ как раз для вашей информации.

Вы также можете использовать RedirectAttributes и без FlashAttributes также

Перед выдачей перенаправлять метод пост должен принимать RedirectAttributes в качестве аргумента

Эти атрибуты будут переданы в качестве параметров запроса

Посмотрите на мой код примера и посмотреть, если его полезным

WAY 1:

@RequestMapping(value={"/requestInfo.htm},method=RequestMethod.POST) 
    public String requestInfoPost1 
    (@ModelAttribute("requestInfoData") RequestInfoData requestInfoData, 
    BindingResult result,RedirectAttributes redirectAttributes, 
    SessionStatus status) 
    { 
    ....... 
    redirectAttributes.addAttribute("name", requestInfoData.getName()); 
    redirectAttributes.addAttribute("age", requestInfoData.getAge()); 

    ..... 
    return "redirect:requestInfoSuccessRedirect"; 
    } 

    @RequestMapping("requestInfoSuccessRedirect") 
    public String requestInfoSuccessRedirect() 
    { 
     return "requestInfoSuccess"; 
    } 

WAY 2: Безотносительно данные добавлены в атрибуте флэша будет добавлен в сессии

Он будет заседать только до редиректа успешно

На редиректе, данные извлекаются из сеанса и добавлены к модели для Новый запрос.

только после того, как редирект успешна, данные удаляются

@RequestMapping(value={"/requestInfo.htm",method=RequestMethod.POST) 
    public String requestInfoPost(@ModelAttribute("requestInfoData") 
    RequestInfoData requestInfoData,BindingResult result, 
    RedirectAttributes redirectAttributes,SessionStatus status) 
    { 

    ....... 

    redirectAttributes.addFlashAttribute("requestInfoData", 
    requestInfoData); 


    ........ 
    return "redirect:requestInfoSuccessRedirect"; 
} 
@RequestMapping("requestInfoSuccessRedirect") 
public String requestInfoSuccessRedirect() 
{ 
    return "requestInfoSuccess"; 
} 
Смежные вопросы