Java JSF中convertDateTime的奇怪行为

Java JSF中convertDateTime的奇怪行为,java,richfaces,jsf-1.2,Java,Richfaces,Jsf 1.2,我将JSF与richfaces一起使用。我正在使用核心ip的convertDateTime将inputText转换为日期 <h:inputText styleClass="datepicker" value="#{searchBean.creationDate}" id="inputfield"> <f:convertDateTime pattern="yyyy-MM-dd" /> </h:inputText> 日期为空: START PHASE RES

我将JSF与richfaces一起使用。我正在使用核心ip的convertDateTime将inputText转换为日期

<h:inputText styleClass="datepicker" value="#{searchBean.creationDate}" id="inputfield">
  <f:convertDateTime pattern="yyyy-MM-dd" />
</h:inputText>
日期为空:

START PHASE RESTORE_VIEW(1)
END PHASE RESTORE_VIEW(1)
START PHASE APPLY_REQUEST_VALUES(2)
END PHASE APPLY_REQUEST_VALUES(2)
START PHASE PROCESS_VALIDATIONS(3)
END PHASE PROCESS_VALIDATIONS(3)
START PHASE UPDATE_MODEL_VALUES(4)
END PHASE UPDATE_MODEL_VALUES(4)
START PHASE INVOKE_APPLICATION(5)
END PHASE INVOKE_APPLICATION(5)
START PHASE RENDER_RESPONSE(6)
END PHASE RENDER_RESPONSE(6)
START PHASE RESTORE_VIEW(1)
END PHASE RESTORE_VIEW(1)
START PHASE APPLY_REQUEST_VALUES(2)
END PHASE APPLY_REQUEST_VALUES(2)
START PHASE PROCESS_VALIDATIONS(3)
END PHASE PROCESS_VALIDATIONS(3)
START PHASE RENDER_RESPONSE(6)
END PHASE RENDER_RESPONSE(6)

显然,在第二种情况下,缺少两个步骤。我对JSF非常陌生,对它的内部工作也不太了解。此外,没有验证/转换例外。我被困在这里,不知道到哪里去找解决办法。感谢您的帮助。

当您不输入日期时,未显示更新模型和调用应用程序的原因是验证失败,如果验证失败,则不会使用UI内容更新模型,并且不会调用应用程序逻辑(您的自定义代码)

如果在.properties文件中添加了错误消息,请添加以下内容

javax.faces.converter.DateTimeConverter.DATE=value ({0}) must be a date
否则


这将允许在验证失败时显示错误消息


提交null作为日期时,将出现转换错误。

如果使用JSF 1.2和RichFaces 3.x,则使用
rich:calendar
标记组件处理日期,它在后台使用jquery进行显示。在您的示例中使用它:


在我的申请中:

public class ApplicationBean {
    private Locale locale;
    private String datePattern;

    public ApplicationBean() {
        locale = new Locale("es"); //for spanish
        datePattern = "dd/MM/yyyy"; //you can change it to yyyy-MM-dd
    }
}
其中ApplicationBean具有ApplicationScope

更多信息请点击此处:


什么样的验证。在这种情况下,不是应该抛出一个可见的异常吗?@UmerHayat您需要在页面中指定一个消息显示。要么在页面中使用
,要么使用
这样页面中只会显示它非常感谢,这对调试问题非常有帮助:)
public class ApplicationBean {
    private Locale locale;
    private String datePattern;

    public ApplicationBean() {
        locale = new Locale("es"); //for spanish
        datePattern = "dd/MM/yyyy"; //you can change it to yyyy-MM-dd
    }
}