Struts 2中带时间验证的java日期选择器
我正在使用Struts2 JQuery datepicker tag
但我无法验证它。在我的validation.xml
文件中,我将其视为date
,但它删除了时间部分。有什么解决办法吗?我应该使用正则表达式来验证我的日期时间吗
JSP表单
代码与我前面的问题Struts2 jquery datepicker passing 0 or null value to action class中的代码有些相同
动作类:
public Date getDateAndTimeOfOccurance() {
return dateAndTimeOfOccurance;
}
public void setDateAndTimeOfOccurance(Date dateAndTimeOfOccurance) {
System.out.println(dateAndTimeOfOccurance);
this.dateAndTimeOfOccurance = dateAndTimeOfOccurance;
}
public String execute() throws Exception {
.
.
ps.setTimestamp(13, new java.sql.Timestamp(getDateAndTimeOfOccurance().getTime()));
/* i have modified my database because the time values in java.sql.Date have been depreciated */
.
.
}
是否有任何现有的解决方案?我应该使用regex
验证器吗
更新
对于实验,我删除了验证部分,但在操作中收到的时间仍然是00:00:00
更新2
我找到了一种解决这个问题的方法,如在对这个问题的评论中提到的那样。我也放弃了验证。xml。现在我正在使用注释。现在的问题是如何验证它?它应该是regex
还是有一种struts验证方法将字符串验证为日期(比如使用validate()
方法,我不确定这是一种好的做法)
更新代码(带更新2)
动作类
@RequiredStringValidator(message = "Please enter the date and time of occurance")
public String getDateAndTimeOfOccurance() {
return dateAndTimeOfOccurance;
}
public void setDateAndTimeOfOccurance(String dateAndTimeOfOccurance) {
this.dateAndTimeOfOccurance = dateAndTimeOfOccurance;
}
public void execute(){
....
Date d = null;
try {
d = new SimpleDateFormat("dd-MMM-yyyy hh:mm", Locale.getDefault()).parse(getDateAndTimeOfOccurance());
} catch (java.text.ParseException e) {
e.printStackTrace();
addFieldError(dateAndTimeOfOccurance, "Please enter a valid date");
return INPUT;
}
Timestamp t = new java.sql.Timestamp(d.getTime());
ps.setTimestamp(13, t);
...
}
# 1 楼答案
使用} interceptor 下的Struts文档中进行了描述。您可以将此拦截器配置为执行所有类型的验证,这是默认设置。因此,通过重写validate方法vs声明性验证来使用编程验证是一种合法的方法。当然,您可以通过同一个拦截器执行这两种类型的验证。该框架支持核心包使用的许多基本验证器,所有这些验证器都在bundled validators一节中描述。您还可以通过提供自定义验证器来扩展框架。用于验证两个字段的custom validator的经典示例
validate()
验证操作代码是一种良好的做法。这种类型的验证称为编程的验证,在^{无论您选择哪种类型的验证,您不应该在action方法中这样做(除非您有理由这样做,并且您知道自己在做什么),因为您可以使用框架功能和验证框架将验证逻辑与控制器逻辑分离(假设业务逻辑在服务层上执行)
您应该修复的代码:
这段代码有点笨拙,因为它需要对字符串字段进行两次解析(如果希望从字符串字段中获取
Date
值,则需要解析两次)。此外,它使用固定格式模式,而不考虑上下文的区域设置