0

フィールドを動的に構築し、正規表現を使用してデータ型の検証を設定するページはほぼ完成しましたが、金曜日に、フィールドを単なる文字列ではなく実際のデータ型に結び付け始めたときに問題が発生しました。問題は、日付 (java.util.Date) に関連付けられた値にあります!!

ページと検証のテスト中に、日付フィールドに 12/12/2012 などの日付を入力しています。検証メソッドに到達すると、Tue Dec 11 19:00:00 EST 2012 として表示されます。表示される日付は常に 1 日早い @ 19:00:00 で、まったく異なる形式です。

指定した形式で送信された日付を取得するにはどうすればよいですか?

...また...

日付の値が正しくない理由についてのアイデアはありますか?

ページに日付フィールドを作成する:

<h:inputText id="inputField2" tabindex="#{field.fieldDefinition.fieldOrder}" value="#{field.val}"  validator="#{field.fieldDefinition.validate}" validatorMessage="#{field.fieldDefinition.validationMessage}">
    <f:convertDateTime pattern="MM/dd/yyyy" />
</h:inputText>

呼び出される Validation メソッド:

public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { 
    if (getDataType() != null && getDataType().getValidationExpression() != "") {
        regexValidator = new RegexValidator(); 
        regexValidator.setPattern(getDataType().getValidationExpression()); 
        regexValidator.validate(context, component, value); 
    } 
} 

いつものように...助けてくれてありがとう。

よろしく、

マイク

4

2 に答える 2

1

正規表現バリデーターは、Stringではなくを受け入れますDate。そのバリデーターを取り除きます。まったく必要ありませんDate。入力形式が無効な場合は、既に から変換エラーが発生して<f:convertDateTime>おり、バリデータはまったくヒットしません。

形式が異なる理由については、これが のデフォルト形式にすぎません。 javadocDate#toString()も参照してください。を実行すると、まさにその形式になります。しかし、バリデーターを取り除けば、これについて心配する必要はありません。System.out.println(date)

1 日早い理由については、JSF がデフォルトで GMT タイムゾーンを使用するためですが、Date#toString()システム プラットフォームのデフォルト タイムゾーンがデフォルトで使用されているためです。 javadocも参照してください。しかし、バリデーターを取り除けば、これについて心配する必要はありません。

于 2012-12-10T12:10:04.683 に答える
0

でタイムゾーンを設定する必要<f:convertDateTime />があります。詳細については、この投稿をご覧ください: f:convertDateTime が間違った日付を表示する

于 2012-12-10T06:49:36.463 に答える