我已经创建了一个自己的验证器,用于验证将被解析为java.util.Date的String输入,并且必须是以下格式:dd.MM.yyyy hh:MM:ss 当我现在提交输入时,验证被正确调用(也就是说,它也得到了正确的输入)并且非常有效,但即使验证器抛出ValidationException也没有任何反应,即表单已提交并显示网站。
所以,这是我的代码:
.xhtml的一部分:
<h:form>
<h:panelGrid columns="2">
<h:outputText value="Date: (dd.MM.yyyy HH:mm:ss)" />
<h:inputText id="date" value="#{controller.date}">
<f:validator validatorId="dateValidator" />
</h:inputText>
<h:message for="date" style="color: red;" />
</h:panelGrid>
<h:commandButton value="Ok" action="#{controller.submit}" />
</h:form>
验证
@FacesValidator(value="dateValidator")
public class DateValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component, Object object)
throws ValidatorException {
String date = (String)object;
FacesMessage message = null;
if(date == null) {
message = new FacesMessage("Date must be set");
}
SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
try {
sdf.parse(date);
} catch (ParseException e) {
message = new FacesMessage("String hasn't the format: dd.MM.yyyy HH:mm:ss");
}
if(message != null) {
message.setSeverity(FacesMessage.SEVERITY_ERROR);
throw new ValidatorException(message);
}
}
}
有没有人知道,为什么ValidationException没有显示而只是被忽略?
<小时/> 的更新:
好的,我弄清楚问题究竟是什么。验证器工作绝对完美,但它是引导模式的一部分,如果我单击提交按钮,对话框将消失而不显示错误。
干杯, metalhamster