【问题标题】:Spring MVC Redirect. Model and Forms ClearingSpring MVC 重定向。模型和表格清算
【发布时间】:2015-08-05 02:51:11
【问题描述】:

假设我有一个 Web 表单,并且每当提交表单时,都会对其进行验证。

如果出现错误,我会将其重定向到同一页面并使用 RedirectAttributes 来维护表单值以便重新提交。 否则,它会成功提交到下一页。

问题: (1) 每当我返回或重新访问相同的表单 url 时,它始终保留提交的输入 (2) 尝试提交新值时,它会更改(更新)之前提交的数据。 (3) 提交成功后我希望它被清除为一个新的表单对象。

到目前为止,这是我的控制器代码:

获取

@RequestMapping (method = RequestMethod.GET) 
public String setForm(Model model, HttpSession session){
Object o;
if(!model.containsAttribute("object")){
    model.addAttribute("object", new Object());
}
else{
    l= (Object)modelasMap().get("object");
}
return "app/formUrl";
}

在我的 POST

@RequestMapping(method = RequestMethod.POST)
public String formSubmit(@ModelAttribute("object" Object object, 
final BindingResult result, HttpSession session, 
SessionStatus status, RedirectAttributes attr){

//DO some object manipulation code here

//validation code
if(result.hasErrors()){
     attr.addFlashAttribute(org.springframework.validation.BindingResult.object", result);
     attr.addFlashAttribute("object", object);
return "redirect:/formUrl";
}
else{
//save form inputs here
}
}
return "redirect:successPage";
}

当我在我的 GET 中设置条件 if(!model.containsAttribute("object")) 时,为什么它没有返回一个新的清除表单,我真的很困惑。

我希望有人可以向我解释似乎是什么问题。提前致谢!

编辑:

添加 <mvc:annotation-driven ignore-default-model-on-redirect = "true"/> 给我错误:

cvc-complex-type.3.2.2: Attribute 'ignoreDefaultModelOnRedirect' is not allowed to appear in element 'mvc:annotation-driven'.

如果我使用ignoreDefaultModelOnRedirect,也会出现同样的错误

附加信息 - 我正在构建 Maven。

【问题讨论】:

    标签: spring forms validation post get


    【解决方案1】:

    您是否尝试在您的 servlet 配置中将 ignore-default-model-on-redirect 属性设置为 true?如下:

    <mvc:annotation-driven ignore-default-model-on-redirect="true" />
    

    来自the documentation

    默认情况下,渲染和重定向场景都使用“默认”模型的内容。或者 控制器方法可以声明一个 RedirectAttributes 参数并使用它为重定向提供属性。 将此标志设置为 true 可确保在重定向场景中永远不会使用“默认”模型,即使 未声明 RedirectAttributes 参数。将其设置为 false 意味着“默认”模型可以用于 如果控制器方法未声明 RedirectAttributes 参数,则重定向。默认设置为假,但 新应用程序应考虑将其设置为 true。

    【讨论】:

    • 使用这种方法,我会遇到一个问题,因为我使用的是 Maven 构建,这是唯一的方法吗?
    • 您可以尝试使用上述RedirectAttributes 参数。这是带有示例的 java 文档的链接:docs.spring.io/spring/docs/3.1.x/javadoc-api/org/…
    • 添加 给我错误:cvc-complex-type.3.2.2: Attribute 'ignoreDefaultModelOnRedirect' is不允许出现在元素“mvc:annotation-driven”中。
    【解决方案2】:

    所以找到了答案。我将整个 GET 方法替换为带有相应参数(url、model、new Object())的 ModelAndView。

    并且在 'if(result.hasErrors())' 下返回应该是转发而不是重定向 url。

    【讨论】:

      猜你喜欢
      • 2018-09-11
      • 2015-05-19
      • 1970-01-01
      • 2014-02-23
      • 2018-03-23
      • 2014-06-20
      • 2015-06-05
      • 1970-01-01
      相关资源
      最近更新 更多