重定向后如何保留请求参数



当我发送带有空输入的表单时,我正在尝试解决错误。

这是我的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
}

当存在错误(空输入)时,控制器将重定向到此链接以告诉用户纠正错误。问题是当我在这里检查参数时,它们看起来正确(ID,名称...),但是ID在以下方法中变为null:

@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);
    // ...
}

好吧,我不知道为什么参数ID在重新抛弃后会更改?你有什么主意吗?我试图在第一个方法中重新降低参数,但仍然获得了相同的nfe。

预先感谢您。

谢谢

尽管接受了上一个答案,但我只是为您的信息添加了此答案。

您也可以在发出重定向之前,在发出flashAttributes的情况下,在发行重定向之前,Post方法应将重新定位归因于参数作为参数,这些属性将通过请求参数查看我的代码示例,并查看其是否有帮助。

>。 >

方式1:

@RequestMapping(value={"/requestInfo.html"}, method=RequestMethod.POST)
public String requestInfoPost1(
    @ModelAttribute("requestInfoData") RequestInfoData requestInfoData,
    BindingResult result,
    RedirectAttributes redirectAttributes, 
    SessionStatus status
) { 
       // some logic
       redirectAttributes.addAttribute("name", requestInfoData.getName());
       redirectAttributes.addAttribute("age", requestInfoData.getAge());
       // some logic
       return "redirect:requestInfoSuccessRedirect";
}
@RequestMapping("requestInfoSuccessRedirect")
public String requestInfoSuccessRedirect()
{
    return "requestInfoSuccess";
}

方式2:在flash属性中添加的任何数据都将在会话中添加,只有在重定向重定向之前,将在会话中进行会话,从会话中检索数据并将其添加到模型中以获取新请求。只有在重定向成功之后,删除数据

@RequestMapping(value={"/requestInfo.htm"}, method=RequestMethod.POST)
public String requestInfoPost(
    @ModelAttribute("requestInfoData") RequestInfoData requestInfoData,
    BindingResult result, 
    RedirectAttributes redirectAttributes,
    SessionStatus status
) { 
    // some logic
    redirectAttributes.addFlashAttribute("requestInfoData",  
    requestInfoData);
    // some logic
    return "redirect:requestInfoSuccessRedirect";
}
@RequestMapping("requestInfoSuccessRedirect")
public String requestInfoSuccessRedirect()
{
    return "requestInfoSuccess";
}

该请求参数仅适用于一个请求。您进行重定向,这意味着您要做另一个新的"请求"。

您应该将其添加到重定向:

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

最新更新