gpt4 book ai didi

java - 在 Struts 2 中进行时间验证的日期选择器

转载 作者:行者123 更新时间:2023-11-30 11:19:30 25 4
gpt4 key购买 nike

我正在使用 Struts2 JQuery datepicker tag .

但我无法验证它。在我的 validation.xml 文件中,我将其作为 date,但它删除了时间部分。有什么解决办法吗?我应该使用正则表达式来验证我的日期时间吗?

JSP 表单

代码与我之前的问题 Struts2 jquery datepicker passing 0 or null value to action class 中的代码有些相同

Action 类:

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 validator 吗?

更新

为了实验,我删除了验证部分,但操作中收到的时间仍然是 00:00:00

更新 2我找到了一种方法来解决这个问题,方法是收到这个问题的评论中提到的 Struts2 JQuery Datepicker not working properly .我也删除了 validation.xml。现在我正在使用注释。现在的问题是如何验证它?它应该是一个 regex 还是有一个 struts 验证方法来验证一个字符串作为日期(比如使用 validate() 方法,我不确定它是不是一个好方法练习)。

更新代码(更新 2)

Action 类

@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);

...
}

最佳答案

使用validate() 来验证您的操作代码是一个很好的做法。这种类型的验证称为程序化 验证,并在 validation interceptor 下的 Struts 文档中进行了描述。 .您可以将此拦截器配置为执行各种默认设置的验证。因此,与声明式 验证相比,通过覆盖验证方法来使用程序化验证是您可以在操作中合法执行的一种方式。当然,您可以通过同一个拦截器进行两种类型的验证。该框架支持核心包使用的许多基本 validator ,所有这些都在 bundled validators 部分进行了描述。 .您还可以通过提供自定义 validator 来扩展框架。 custom validator经典 示例用于验证两个字段。

无论您选择哪种类型的验证,都不应该在操作方法中执行(除非您有理由这样做,并且您知道自己在做什么),因为您可以使用框架功能和验证将验证逻辑与 Controller 逻辑分开的框架(假设业务逻辑在服务层执行)。

您应该修复的代码:

protected static SimpleDateFormat getDateFormat(){
return new SimpleDateFormat("dd-MMM-yyyy hh:mm");
}

@Override
public void validate(){
try {
SimpleDateFormat df = getDateFormat();
df.parse(dateAndTimeOfOccurance);
} catch (java.text.ParseException e) {
e.printStackTrace();
addFieldError(dateAndTimeOfOccurance, "Please enter a valid date");
}
}


@Override
public void execute() throws Exception {
SimpleDateFormat df = getDateFormat();
Date d = df.parse(dateAndTimeOfOccurance);
Timestamp t = new java.sql.Timestamp(d.getTime());
ps.setTimestamp(13, t);
...
return SUCCESS;
}

这段代码有点笨拙,因为它需要解析一个字符串字段两次(如果您想从字符串字段中获取 Date 值,则可以根据需要解析多次)。此外,无论上下文的区域设置如何,它都使用固定的格式模式。

关于java - 在 Struts 2 中进行时间验证的日期选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23194997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com