带有验证程序问题的primefaces日历更改事件

时间:2019-01-15 16:45:04

标签: validation jsf primefaces

我正在使用带有自定义验证程序的<p:calendar />。我希望验证器被change事件触发。

此外,我使用的日期模式包括时间(dd.MM.yyyy HH:mm)。 如果使用时间,则该组件的行为与简单日期的使用不同。在弹出日期选择器中选择一个日期时,弹出窗口本身不会自动关闭,因为可能要随后选择时间。

在我的设置中,我需要更新消息和日历以获取正确的验证演示文稿(消息中的信息和日历上的红色边框)。 但是更新关闭了日期选择器,因此我需要将其打开两次以设置日期和时间。无论如何,它仍然会变得更糟,因为时间滑块实际上在每个步骤上触发了一个更改事件,因此我根本无法使用滑块(我需要打开选择器三十次才能将其设置为十二点半)。

我看到了矛盾的要求(更新组件与保持弹出状态),但是没有解决方案。感谢您的任何建议。

<p:message 
    id="id_message" 
    for="id_calendar" />
<p:calendar
    id="id_calendar"
    value="#{backingBean.date}"
    pattern="dd.MM.yyyy HH:mm">
    <f:validator 
        validatorId="myValidator" />
    <p:ajax 
        event="change" 
        update="id_message id_calendar"/>
</p:calendar>

1 个答案:

答案 0 :(得分:0)

很好的建议,谢谢@Kukeltje。

我走得更远,设置delay="10000",以使弹出窗口几乎不会在正常的用户交互中自动关闭。我的用户习惯于由于<p:calendar />组件的标准日期和时间输入行为,弹出窗口不会自动关闭。

这对我来说是成功的秘诀。

更新

也许10秒并不是一个好主意,因为手动输入日期时也需要10秒才能触发验证...