0

サーバー (Spring を使用) とクライアント (ExtJS) の間で透過的なデータ受け渡しを実装したいと考えています。

サーバー側には、ModelAndView オブジェクトを返す Spring Controller があります (JSP を使用)。私は通常、モデル オブジェクトを作成しません。アイテムをモデル Map に入れるだけです。

簡単で透過的な Java から Javascript オブジェクトへの変換が必要です。サーバー側では、Java Date オブジェクトをマップに配置し、クライアントで Javascript Date オブジェクトを取得します。つまり、サーバー上で次のようなコードを記述します。

public ModelAndView getModelAndView(User user) {
    Map<String, Object> modelMap = new HashMap<String, Object>();
    modelMap.put("date", new Date());
    modelMap.put("intarray", new int[] {1,2,3});
    return new ModelAndView("mainpage", modelMap);
}

クライアントでは、JSP で次のように記述します。

var model = <someMagicTagOrSomething />

レンダリングされた HTML では、次のようになります。

var model = {
     date: Date.parse('2012-01-01 12:12:12', 'Y-m-d H:m:s'), //JS Date object
     intarray: [1,2,3]
}

Spring のドキュメントで見たことのほとんどは、@NumberFormat(style=Style.PERCENT) のような注釈を使用してサーバーでオブジェクトの書式設定を指定し、form:input タグを使用してクライアントでそれらを取得することです。クライアントで日付をフォーマットし、クライアントに送信されるフォーマットについて心配したくないので、これは私が望むものではありません。

これを達成するための最良の方法は何ですか? すぐに使えるソリューションはありますか、それとも自分で何かを書く必要がありますか? Gson のようなライブラリを使用してモデルを JSON に変換できることはわかっていますが、これは Java Dates を文字列として返すので、Javascript の日付オブジェクトをすぐに取得したいので、フォーマットについて心配する必要はありません。

アドバイスありがとうございます。

ピーター

4

2 に答える 2

1

日付を何らかの形式にシリアル化することは避けられません。Javascript は Java オブジェクトを理解しないので、いくつかのシリアル化ステップ (json、xml など) が必要です。

あなたの最善の方法は、日付をISO文字列として送信し、それらで使用Date.parse(isostring)することです。その場合、フォーマット文字列を指定する必要がないため、タイプを減らす必要があり、少なくともほとんどのクライアントが理解できるフォーマットで作業できます。

于 2012-04-23T10:05:21.533 に答える
0
<c:set var="myModelObject" value="${myObjectFromServer}"/>

 <script>
   var myJSvar = "${myModelObject}";
 </script>

そして、ええ、日付をシリアライズ/デシリアライズする必要があります...私は PropertyEditor を拡張します:

public class LocalDateEditor extends PropertyEditorSupport{
    @Override
    public void setAsText(String text) throws IllegalArgumentException{
        setValue(DateTimeFormat.forPattern("dd MMM yyyy").print(text));
    }

それを yr コントローラーに登録します (グローバルなものを設定することもできますが、方法を思い出せません):

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(LocalDate.class, new LocalDateEditor());
}

その価値のために、私はグローバルな日付フォーマッタを使用し、ユーザー インターフェイスではグローバルな jquery ui datepicker クラスを使用します。実際にはコーディングはほとんど必要ありません。そして、最初のセットアップの後、すべてが箱から出してすぐに機能します。私はISO標準の日付が好きではありませんでした(それは私がイギリス人だからかもしれません:-( )

于 2012-04-23T10:02:25.687 に答える