Spring 重定向后如何保留请求参数?
当我发送一个带有空输入的表单时,我试图解决一个错误 这是我的方法:Spring 重定向后如何保留请求参数?,spring,spring-mvc,http-request-parameters,Spring,Spring Mvc,Http Request Parameters,当我发送一个带有空输入的表单时,我试图解决一个错误 这是我的方法: @RequestMapping(value = "/modifier.html", method = RequestMethod.POST) public String modifier(ModelMap map, @ModelAttribute("FormObject") FormObject formObject, BindingResult result, HttpServletRequest req) { fo
@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);
// ...
}
@覆盖
公共ModelAndView调度程序(HttpServletRequest请求、HttpServletResponse响应)引发RorException异常{
Map myModel=(Map)request.getAttribute(EnumParam.R_MY_MODEL.getKey());
枚举键=request.getParameterNames();
while(keys.hasMoreElements()){
String paramName=(String)keys.nextElement();
字符串值=request.getParameter(paramName);
myModel.put(参数名、值);
}
GlobalSession GlobalSession=(GlobalSession)getApplicationContext().getBean(Utilities.GlobalSession\u BEAN\u REF);
myModel.put(“module”,globalSession.getModule().getKeyMessage());
String section=request.getParameter(“section”);
//此指令返回null
字符串idForm=request.getParameter(“id”);
id=Integer.parseInt(idForm);
//此指令返回NumberFormatException
ObjectForm of=getForm(id);
// ...
}
我不知道为什么参数id在重新定价后发生了变化?你知道吗?我尝试在第一种方法中重新定义参数,但仍然得到相同的NFE
先谢谢你
谢谢请求参数仅适用于一个请求。 你做了一个重定向,这意味着你做了另一个新的“请求” 您应该将其添加到重定向:
return“redirect:/gestion.html?section=Configuration&panel=4&ouvrir=modifier&idTypeOuverture=“+idParam代码>虽然前面的答案已被接受,但我添加此答案仅供参考
您还可以在发出redirect之前使用带有和不带FlashAttributes的RedirectAttributes,post方法应将RedirectAttributes作为参数。这些属性将作为请求参数传递。查看我的代码示例,看看它是否有用
方式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";
}
由于gestion.html上的重定向不包含id
参数,因此将获得null