3

なぜこれが必要なのですか:

私は、ユーザーがネパールのビクラマ暦の日付Java形式(およびSQL's「日付」と互換性がない)で日付を選択できるようにするプロジェクトに取り組んでいます。私はorg.codehaus.groovy.grails.plugins.web.taglib.FormTagLibクラスのを変更することによってそれをしましたdatePicker tagLibrary。そして、足場テンプレートを変更しlist.gspます。

ここに画像の説明を入力してください

私の問題 :

[day, month, year]ユーザーがブラウザからネパールの日付を選択してフォームを送信したら、を読んでオブジェクトに変換し、Java Dateデータベースに保存したいと思います。(日付は、表示されるときにネパールのビクラマ暦に戻されます)。

コントローラーでパラメーターを出力しようとしましたが、すべてのパラメーターは、ネパールの日付とともに、対応するオブジェクトに既にマップ/ラップされています。だから私は以下のコードからJavaの日付のsysoutを取得します:

println params.date

フォーム送信リクエストをインターセプトし、日付パラメータを英語の日付に変更するにはどうすればよいですか。フォーム送信の前にJavaScriptを使用して(そして変換コードをJavaScriptに書き直して)パラメータを変換するという1つの解決策があります。そして、インターセプター/フィルターなどの簡単な方法があることを確認したかっただけです。

4

2 に答える 2

1

オブジェクトにラップされる前の日付からフォーマットを変更するCustomEditorRegistrarを作成できます。このような:

public class CustomDateEditorRegister implements PropertyEditorRegistrar {

    public void registerCustomEditors(PropertyEditorRegistry registry) {

        String dateFormat = 'dd/MM/yyyy'
        registry.registerCustomEditor(Date, new CustomDateEditor(new SimpleDateFormat(dateFormat), true))
    }


}

また、日付エディタは次のようになります。

class CustomSimpleDateEditor extends CustomDateEditor {

    public CustomSimpleDateEditor(SimpleDateFormat formatter, boolean allowEmpty) {
        super(formatter, allowEmpty);
    }

    public String getAsText() {
        Date date = (Date)getValue();
        try {
            String dateText = new SimpleDateFormat("dd/MM/yyyy").parse(date);
            return dateText;
        } 
        catch(Exception e) {
            e.printStackTrace();
            return "";
        }
    }

}

params.dateは、オブジェクトに渡されてデータベースに保存される前に変換されます。とにかく、ここにそれを説明する良いリンクがあります。

それが役に立てば幸い!

于 2012-07-23T14:53:17.610 に答える
1

さて、標準の grails datepicker で入力フィールドを使用していると仮定すると、params で、渡されるフィールドを別の名前でマップする必要があります。リクエストを受け取るアクションに「println params」を記述し、datepicker のフィールドの名前を探します。(datepicker フィールドの名前、たとえば、年は * + _year、月は * + _month など) のようなものが表示されるはずでした。

于 2012-07-24T14:57:12.963 に答える