Validation 比较使用同一类的两个字段
我有两个输入字段fromDate和toDate,它们是Date类的实例。 Date类使用自定义日期验证器来验证月、日和年字段 包含在日期字段中。 自定义日期验证程序特定于每个日期,即fromDate和toDate。 我需要比较fromDate和toDate的月、日或年字段。 如果fromDate大于toDate,则必须显示验证消息 更新: fromDate和toDate是两个自定义日期组件,如下所示Validation 比较使用同一类的两个字段,validation,jsf,jsf-2,Validation,Jsf,Jsf 2,我有两个输入字段fromDate和toDate,它们是Date类的实例。 Date类使用自定义日期验证器来验证月、日和年字段 包含在日期字段中。 自定义日期验证程序特定于每个日期,即fromDate和toDate。 我需要比较fromDate和toDate的月、日或年字段。 如果fromDate大于toDate,则必须显示验证消息 更新: fromDate和toDate是两个自定义日期组件,如下所示 <eg:dateField id="inpFromDate" value="#{mrBea
<eg:dateField id="inpFromDate" value="#{mrBean.fromDate}" .... />
<eg:dateField id="inpToDate" value="#{mrBean.toDate}" .... />
在这种情况下,如果每个日期都有验证器,您将如何实现验证器?是的,您可以!假设您有以下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" />
请注意,我正在使用PrimeFaces的
组件编写示例,因为绑定到此组件的属性将在验证之前自动转换为日期
对象。在您的程序中,您可以使用自己的转换器
将字符串
转换为日期
是的,您可以!假设您有以下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" />
请注意,我正在使用PrimeFaces的
组件编写示例,因为绑定到此组件的属性将在验证之前自动转换为日期
对象。在您的程序中,您可能有自己的转换器
来将字符串
转换为日期
如果在设置结束日期后将开始日期更改为错误的日期会怎么样?当您使用普通的
,
和
时,这对OP更有帮助,但要点很清楚。顺便说一句,验证程序类名也可以比“DateValidator”更自我描述。可能是“DateRangeValidator”@BalusC我已经用验证程序的新名称更新了我的答案。起初,我确实用
编写了我的示例。但是,我对
不是很熟悉,因为我一直在使用
。这就是为什么我最后用素面写作,并在结尾处写了一个便条:P@user1072193:hmm。。。我认为您可以将2个验证器组合成1个验证器,只用于toDate
@Mr.J4mes:您的意思是删除@customDateValidator?如果在设置结束日期后将开始日期更改为错误日期会怎么样?如果您使用普通
、
和
会对OP更有帮助,但问题很清楚。顺便说一句,验证程序类名也可以比“DateValidator”更自我描述。可能是“DateRangeValidator”@BalusC我已经用验证程序的新名称更新了我的答案。起初,我确实用
编写了我的示例。但是,我对
不是很熟悉,因为我一直在使用
。这就是为什么我最后用素面写作,并在结尾处写了一个便条:P@user1072193:hmm。。。我认为您可以将2个验证器组合成1个验证器,只用于toDate
@Mr.J4mes:您的意思是删除@customDateValidator?
@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);
}
}
}