Spring未显示动态生成的表单ID的验证错误

时间:2015-06-24 09:20:40

标签: spring validation spring-mvc data-binding spring-form

Spring验证适用于具有静态id的表单。但在我的场景中,表格是在前端动态生成的。

例如 - 我的表单bean是 - GenericQuestionnaireForm,所以如果我有下面的表单元素

<form:form method="post" modelAttribute="genericQuestionnaireForm" action="/save-generic-questionnaire">

验证工作正常,错误也正确显示。

但是我必须捕获不同产品的表单值,因此我通过将表单名称附加到产品编号来生成具有唯一ID的不同表单。

<form:form method="post" modelAttribute="product1_genericQuestionnaireForm"  action="/save-generic-questionnaire">

当我将此表单提交给我的控制器方法时,BindingResult会附加到genericQuestionnaireForm表单对象,因为前端不会显示错误。

@RequestMapping(value = "/save-generic-questionnaire", method = RequestMethod.POST)
public String saveQuestionnaire(@Valid final GenericQuestionnaireForm genericQuestForm,final BindingResult bindingResult,  final Model model,
                                    final RedirectAttributes redirectModel, final HttpServletRequest request) throws CMSItemNotFoundException{

    if(genericQuestForm != null) {

        genericQuestionnaireFormValidator.validate(genericQuestForm, bindingResult);
        if (bindingResult.hasErrors()) 
        {  return //to the front end..}
}

我的查询是 - 是否有办法将BindingResult附加到动态表单Id以显示生成的错误。或者在这种情况下有更好的方法进行表单验证吗?

1 个答案:

答案 0 :(得分:1)

<<form:form:form method="post" modelAttribute="genericQuestionnaireForm" action="/save-generic-questionnaire" >
        <form:hidden path="id"/>
.................
</form:form>

modelAttribute属性始终保持不变。

@ModelAttribute("genericQuestionnaireForm")
public genericQuestionnaireForm getgenericQuestionnaireForm(){
    return new genericQuestionnaireForm();
}

RequestMapping(value = "/save-generic-questionnaire", method =   
RequestMethod.POST)

public String saveQuestionnaire(@Valid final GenericQuestionnaireForm genericQuestForm, BindingResult bindingResult.....

用于标识不同的产品只需使用隐藏ID。