問題タブ [vaadin-flow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
615 参照

data-binding - SerializableFunction オブジェクトのペアを定義して、データ バインディング用の Converter を提供する

Vaadin 8 フレームワークと Vaadin 10 フローでは、データ バインディング機能により、ウィジェットの予期されるデータ型 ( aなど) とバッキング Bean プロパティのデータ型 (数値など)Converterの間を仲介する を提供できます。StringTextFieldInteger

この例では、組み込みのConverter実装StringToIntegerConverterが使用されています。

しかし、他の型に対して a を定義するのConverterはどうでしょうか? 短くて甘い を簡単に定義するにはどうすればよいConverterですか? たとえば、文字列からUUIDへのコンバーターです。正規の 36 文字の 16 進文字列を に表示しTextField、逆方向にその文字列を解析して UUID に戻します。

どちらもオブジェクトのペアを取るBinder.BindingBuilderメソッドのペアを提供していることがわかります。withConverterSerializableFunction

  • Binder.BindingBuilder::withConverter(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation)
  • Binder.BindingBuilder::withConverter(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation, String errorMessage)

➥ では、SerializableFunctionオブジェクト/クラスのペアをどのように定義すればよいでしょうか?

このインターフェースが既知のサブインターフェースをリストしていることに気付きました。それはおなじみのように見えますが、短い単純なコンバーターを簡単に定義するための鍵となる予感があります。しかし、ラムダを使用した構文と、ここで行われているすべてのことを完全には理解していません。ValueProvider<SOURCE,TARGET>

を実装するクラスの書き方を尋ねているわけConverterではありません。上記SerializableFunctionのメソッドに箇条書き項目として渡す引数のペアをどのように記述するかを尋ねています。Binder.BindingBuilder::withConverter

そのJavaDocを引用:

Interface Binder.BindingBuilder<BEAN,TARGET>

…</p>

withConverter

default <NEWTARGET> Binder.BindingBuilder<BEAN,NEWTARGET> withConverter(SerializableFunction<TARGET,NEWTARGET> toModel, SerializableFunction<NEWTARGET,TARGET> toPresentation)

マッピング関数を使用してバインディングを別のデータ型にマップし、エラー メッセージとして例外を示します。

マッピング関数は、バインディングの現在のターゲット データ型と一致する必要があるプレゼンテーション型と、任意のデータ型でバインディングの新しいターゲット型になるモデル型との間の変換に使用されます。を呼び出す場合bind(ValueProvider, Setter)、バインディングのターゲット タイプはゲッター/セッター タイプと一致する必要があります。

たとえば、次のような適切な関数を使用して、TextField を整数型のプロパティにバインドできます。withConverter(Integer::valueOf, String::valueOf);

型パラメータ:

NEWTARGET- 変換する型

パラメーター:

toModel- 古いターゲット タイプから新しいターゲット タイプに変換できる関数

toPresentation- 新しいターゲット タイプから古いターゲット タイプに変換できる関数

戻り値:

適切なタイプの新しいバインディング

スロー:

IllegalStateException- bind がすでに呼び出されている場合