Skip to main content
 首页 » 编程设计

forms中Spring MVC 选择 :selected after form validation error 形式的值

2024年11月24日15lexus

我的验证表单有问题,该表单有很多不同的字段(输入文本字段、选择选项、多重选择选项...)。我已经使用 Spring Security 开发了有关验证表单的所有逻辑源代码,但是当验证表单失败(例如,用户没有填写任何内容)并再次重新加载表单时,所有输入文本字段都已正确填写,但选择选项和多个选择选项已被删除,用户必须再次选择。为什么不像文本字段一样填充?

这是我的一个观点:

    <tr> 
            <td><form:label path="TechContactName"><spring:message code="label.techcontactname"/><sup>*</sup></form:label></td> 
            <td><form:input path="TechContactName" /></td> 
            <td><form:errors path="techContactName" cssClass="error" /></td> 
        </tr>  
 
 
<tr> 
            <td><form:label path="LicenseProduct"><spring:message code="label.licenseproduct"/><sup>*</sup></form:label></td> 
            <td><form:select path="licenseProduct" id="selectProduct" size="6" > 
                        <option >Option 1</option> 
                        <option >Option 2</option> 
                        <option >Option 3</option> 
                        <option >Option 4</option> 
                        <option >Option 5</option> 
                        <option >Option 6</option> 
                </form:select></td> 
            <td><form:errors path="licenseProduct" cssClass="error" /></td> 
    </tr> 
 
    <tr> 
            <td><form:label path="DeployCountries"><spring:message code="label.deploycountries"/><sup>*</sup></form:label></td> 
            <td><form:select path="deployCountries" id="selectCountries" multiple="multiple" > 
                       <option value="AT">Austria</option> 
                       <option value="BE">Belgium</option> 
                       <option value="DK">Denmark</option> 
                       <option value="FI">Finland</option> 
                       <option value="FR">France</option> 
                       <option value="DE">Germany</option> 
                </form:select> </td> 
           <td><form:errors path="deployCountries" cssClass="error" /></td> 
        </tr> 

还有我的 Controller :

@SuppressWarnings("finally") 
    @RequestMapping(value = "/add", method = RequestMethod.POST) 
    public String addLicense(@Valid @ModelAttribute(value="license")  LicenseEntity license, BindingResult result, ModelMap map, HttpServletRequest request)  
    { 
        if(result.hasErrors()){ 
            System.out.println("validation errors size..."+result.getErrorCount()); 
 
            return "editLicenseList"; 
        } else { 
            //all works correctly            
        } 
 
    } 

当验证失败但 form:select 和 form:select multiple 失败并使用所选的任何值重新加载表单时,表单输入文本字段 si 正确填写。

提前致谢!

请您参考如下方法:

尝试使用 Spring 的 <form:option>标签,而不是 HTML 自己的 <option>标签。这将确保该选项在验证失败后保持选中状态(因为 Spring 将设置 selected 属性)。

<form:select path="licenseProduct" id="selectProduct" size="6" > 
    <form:option value="Option 1"/> 
    <form:option value="Option 2"/> 
    <form:option value="Option 3"/> 
    <form:option value="Option 4"/> 
    <form:option value="Option 5"/> 
    <form:option value="Option 6"/> 
</form:select> 

还有

<form:select path="deployCountries" id="selectCountries" multiple="multiple" > 
    <form:option value="AT" label="Austria"/> 
    <form:option value="BE" label="Belgium"/> 
    <form:option value="DK" label="Denmark"/> 
    <form:option value="FI" label="Finland"/> 
    <form:option value="FR" label="France"/> 
    <form:option value="DE" label="Germany"/> 
</form:select>