我有两个输入字段fromDate和toDate,它们是Date类的实例。 Date类使用自定义Date验证器来验证月,日和年字段 包含在日期字段中。 自定义日期验证器特定于每个日期,即fromDate和toDate。 我需要将fromDate的月,日或年字段与toDate进行比较。 如果fromDate大于toDate,则必须显示验证消息。
更新
fromDate和toDate是两个自定义日期组件,如下所示
<eg:dateField id="inpFromDate" value="#{mrBean.fromDate}" .... />
<eg:dateField id="inpToDate" value="#{mrBean.toDate}" .... />
fromDate和toDate是Date类的实例,
public class Date {
private String mm;
private String dd;
@customDateValidator //Validates each date field
private String yyyy;
//constructors
//getters and setters
在这种情况下,如果每个日期都有验证器
,您将如何实现验证器?答案 0 :(得分:6)
是的,你可以!假设您有以下PrimeFaces的输入字段:
<p:calendar id="from" value="#{mrBean.fromDate}" binding="#{from}" >
<p:ajax process="from to" update="toDateMsg" />
</p:calendar>
<p:calendar id="to" value="#{mrBean.toDate}" >
<f:attribute name="fromDate" value="#{from.value}" />
<f:validator validatorId="validator.dateRangeValidator" />
<p:ajax process="from to" update="toDateMsg" />
</p:calendar>
<p:message for="to" id="toDateMsg" />
这应该是您的Validator
:
@FacesValidator("validator.dateRangeValidator")
public class DateRangeValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
if (value == null || component.getAttributes().get("fromDate") == null) return;
Date toDate = (Date) value;
Date fromDate = (Date) component.getAttributes().get("fromDate");
if (toDate.after(fromDate)) {
FacesMessage message = new FacesMessage("Invalid dates submitted.");
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);
}
}
}
请注意,我使用PrimeFaces的<p:calendar>
组件来编写我的示例,因为绑定到此组件的属性将在验证之前自动转换为Date
对象。在您的计划中,您可能拥有自己的Converter
转换String
到Date
。