1

我正在寻找一种方法让 JQuery UI DatePicker 允许将日期设置为任意字符串,包括无效日期。我需要这个让用户有机会更改他可能手动输入的日期,以防此日期格式不正确

脚步:

  • 用户手动输入了错误的日期28/13/2012(日期格式为dd/mm/yy,第 13 个月无效)
  • 用户验证表单
  • struts2 再次显示相同的表单并显示一条消息

预期:在页面重新显示时,字段已填充28/13/2012并显示消息“日期格式不正确”

实际:该字段变为空

用户获取他的旧值不正确会更好28/13/2012吗?我们怎样才能做到这一点?

谢谢


添加:

JSP代码:

<s:textfield name="fromDate" cssClass="datePicker" theme="simple"/>
<s:textfield name="toDate" cssClass="datePicker" theme="simple"/>

JS代码:

$(document).ready(function(){
    $('input.datePicker').datepicker({
        autoSize: true,
        dateFormat: '<s:text name="date.datePicker.dateFormat"/>',
        showOtherMonths: true,
        selectOtherMonths: true,
        changeMonth: true,
        changeYear: true,
        numberOfMonths: 3,
        dayNamesMin: '<s:text name="date.datePicker.dayNamesMin"/>',
        monthNamesShort: '<s:text name="date.datePicker.monthNamesShort"/>'
    });

    // Gestion du la dépendance entre date de début et de fin
    $('input[name="fromDate"]').datepicker( "option", "onClose", function( selectedDate ) {
        $( 'input[name="toDate"]' ).datepicker( "option", "minDate", selectedDate );
    });
    $('input[name="toDate"]').datepicker( "option", "onClose", function( selectedDate ) {
        $( 'input[name="fromDate"]' ).datepicker( "option", "maxDate", selectedDate );
    });

});

Java代码(动作类):

private String toDate;
private String fromDate;
// + getters and setters
4

2 回答 2

1

我同意您提出的界面比 jQuery UI 附带的更好。不幸的是,没有特别简单的解决方案。jQuery UI 小部件没有特别正交的设计,正如您为 DatePicker 定义的 50 多个选项所见。特别是,验证不是一个单独的策略对象,与验证相关的行为也不是可配置的。

我在 1.7 和 1.8 版本中处理了类似的问题,然后才支持菜单小部件。在他们发布预发布之前,我使用了一个半定制的实现,从网络上的一些原型代码修改而来。这很好,因为该产品仍在开发中。在预发布之后,我进行了转换,然后随着每个次要预发布的小部件略有变化,我进行了一次又一次的转换。所以我怀疑你坚持使用自定义或半自定义实现。

至于如何继续,我建议使用一个新选项,例如requireValid,它可以为您提供您正在寻找的行为。例如,如果当前文本不是有效日期,您将需要确保它getDate具有理智的行为,即返回。null您可能需要更改setDate以允许分配无效的日期字符串。查看其他方法以查看允许暂时无效值的效果,并做一些合理的事情。

然后,如果您不想自己维护此代码,请将您的更改放入版本中。这将需要更多的花言巧语。你需要很好地论证你的案子,而且可能要大声。

于 2012-11-06T15:21:18.610 回答
1

我终于找到了一个快速的怪癖来显示旧的错误日期

$(document).ready(function(){

    // initialize datepicker
    $('input.datePicker').datepicker({
        autoSize: true,
        dateFormat: '<s:text name="date.datePicker.dateFormat"/>',
        showOtherMonths: true,
        selectOtherMonths: true,
        changeMonth: true,
        changeYear: true,
        numberOfMonths: 3,
        dayNamesMin: <s:text name="date.datePicker.dayNamesMin"/>,
        monthNamesShort: <s:text name="date.datePicker.monthNamesShort"/>
    });

    // Do all your JQuery UI datepicker-related stuff here
    // (...)

    // force old date. Useful when user types a date with month=13 for exemple
    $('input[name="fromDate"]').val('<s:property value="fromDate" />');
    $('input[name="toDate"]').val('<s:property value="toDate" />');
于 2012-11-06T16:03:52.873 回答