java如何在Spring表单中验证日期格式
我是Spring的新手,我正在尝试创建一个验证日期格式的表单(即:它只接受格式为“MM/dd/yyyy
”的日期,如果用户放置“mm-dd-yyyy
”,它应该会显示一条错误消息)
如何使用Spring实现这一点
我读过很多帖子和答案,比如this和this,它们建议在控制器中使用@InitBinder
(顺便说一句,我试过了,但没能成功)。但如果我有一张日期不同的表格呢?或者如果我的控制器管理来自不同表单的多个post请求,并且每个表单都需要不同的日期验证
目前我有以下表格:
<form:form action="getReportFile.html" commandName="staticReportForm">
<table>
<tr>
<td>Reports:</td>
</tr>
<tr>
<td><form:select path="report" items="${staticReports}"/>
</td>
</tr>
<tr>
<td>Date (MM/DD/YYYY) (empty for most recent possible):<FONT color="red"><form:errors
path="date" /></FONT></td>
</tr>
<tr>
<td><form:input path="date" /></td>
</tr>
<tr>
<td><input type="submit" value="Submit" /></td>
</tr>
</table>
</form:form>
这就是支持表单的bean(只有在输入正确格式的情况下,@DateTimeFormat
注释才能使其工作):
public class StaticReportForm {
@NotEmpty
private String report;
@DateTimeFormat(pattern="MM/dd/yyyy")
private Date date;
public String getReport() {
return report;
}
public void setReport(String report) {
this.report = report;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
# 1 楼答案
我不知道是否有一种直接的方法可以在spring中实现,但我所采用的方法是jQuery的DatePicker和InitBinder的组合
在JS端,创建一个:
然后在JS中:
在控制器端,创建如下方法:
从这里,您可以在资源包中创建类型不匹配消息,以创建一条漂亮的消息。用户将无法手动输入该字段,而是只能使用jQuery DatePicker,它将根据需要格式化日期(我认为默认值为MM/dd/yyyy)。如果他们确实设法输入了日期,Spring将使用配置的CustomEditor将字符串从视图转换为预期的日期。如果失败,则BindingResults中会出现错误(如果将其包含在方法签名中)。如前所述,您可以自定义此方法,但在资源包中设置自定义类型不匹配消息
编辑:添加额外的细节,因为我上面的解释显然不够清楚
首先,创建一个Bean或其他东西作为模型属性(从视图到控制器来回发送的内容)。确保其中至少有一个日期
现在你需要一个控制器。我喜欢通过
然后需要一些视图(“控制器中的someDefaultView”,在本例中,我的代码是JSP,使用Spring JSTL标记库)
再次,我建议Google’ing Spring Init Binders、cusomizing binding errors(typeMismatch)和JSR 303提供额外的验证选项,大多数情况下都是well documentet here。此外,如果您不希望下面的错误出现在字段中,就像我在这里所做的那样,有一些方法可以在一个位置重复所有错误,比如将所有错误放在页面顶部。这是非常可配置的,我可能还可以再输入20页,值得深入阅读。这应该足以让你开始寻找好的例子和文档