【问题标题】:Spring MVC selected value in form:selected after form validation errorSpring MVC在表单中选择值:表单验证错误后选择
【发布时间】:2014-01-30 08:53:19
【问题描述】:

我的验证表单有问题,表单有很多不同的字段(输入文本字段、选择选项、多选选项...)。我已经开发了有关使用 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>

还有我的控制器:

@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 失败并重新加载表单并选择任何值。

提前致谢!

【问题讨论】:

    标签: forms validation spring-mvc spring-security


    【解决方案1】:

    尝试使用 Spring 的 &lt;form:option&gt; 标签,而不是 HTML 自己的 &lt;option&gt; 标签。这将确保该选项在验证失败后保持选中状态(因为 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>
    

    【讨论】:

    • 非常感谢威尔基林!!简单的选择完美无缺,但多选没有,如果我在验证表单并重新加载后选择多个选项并没有选择任何东西,有什么办法可以保持选中状态?
    • 提交表单后能否使用调试器检查模型中LicenseEntity.deployCountries的列表是否填充?此列表的值需要与 &lt;form:option&gt; 标记中的 value 所期望的值相匹配 - 所以一个或多个字符串 ATBE
    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-27
    • 1970-01-01
    • 2015-12-20
    • 2011-04-21
    相关资源
    最近更新 更多