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 コード (Action クラス):

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

2 に答える 2

1

あなたが提案したインターフェースが、jQuery UI に同梱されているものよりも優れていることに同意します。残念ながら、特に簡単な解決策はありません。jQuery UI ウィジェットには、DatePicker に定義された 50 の奇数のオプションからわかるように、特に直交する設計はありません。特に、検証は個別のポリシー オブジェクトではなく、検証に関する動作も構成可能ではありません。

メニュー ウィジェットがサポートされる前のバージョン 1.7 と 1.8 で同様の問題に対処しました。彼らがプレリリースを行う前に、Web 上のいくつかのプロトタイプ コードから変更されたセミカスタム実装を使用しました。製品はまだ開発中だったので、これは問題ありませんでした。プレリリースの後、マイナープレリリースごとにウィジェットがわずかに変更されたため、変換を繰り返しました。したがって、カスタムまたはセミカスタムの実装にこだわっていると思います。

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 に答える