私はgwt-platform0.7とgin1.5.0でGWT2.4を使用しています。
GWTアプリケーションの動的(ライブ)翻訳用のライブラリを構築しました。したがって、すべてのウィジェットは、LocaleChangeEvent
が起動されたときに通知TranslationDictionary
を受け取り、新しい文字列を表示するように要求します。
ウィジェットは実際には次のようになります。
public class LocaleAwareLabel extends Label implements LocaleChangeEventHandler {
TranslationDictionary dictionary;
String translationToken;
public LocaleAwareLabel(TranslationDictionary dictionary, EventBus eventBus, String translationToken) {
this.dictionary = dictionary;
this.translationToken = translationToken;
eventBus.addHandler(LocaleChangeEvent.TYPE, this);
getCurrentTranslationFromDictionary();
}
public void getCurrentTranslationFromDictionary() {
this.setText(dictionary.getTranslation(translationToken));
}
@Override
public void onLocaleChange(LocaleChangeEvent event) {
getCurrentTranslationFromDictionary();
}
}
ご覧のとおり、このウィジェットをUiBinderで簡単に使用することはできません。現時点では、インジェクトして次のEventBus
よう に使用TranslationDictionary
しています。View
@UiField(provided=true)
@UiField(provided=true)
LocaleAwareLabel myLabel;
@Inject
public MyView(TranslationDictionary dictionary, EventBus eventBus) {
widget = uiBinder.createAndBindUi(this);
myLabel = new LocaleAwareLabel(dictionary, eventBus, "someTranslationToken");
}
欲しいもの:ウィジェットを使わず@UiField(provided=true)
に使用するので、次のようにウィジェットを簡単に入れることができますui.xml
。
<custom:LocaleAwareLabel ui:field="myLabel" translationToken="someTranslationToken" />
translationToken
次を使用してUiBinder経由で設定できることを知っています。
public void setTranslationToken(String translationToken) {
this.translationToken = translationToken;
}
しかし、それでも、とが原因でゼロ引数コンストラクターを使用できないという問題がEventBus
ありTranslationDictionary
ます。getCurrentTranslationFromDictionary()
さらに、もちろんコンストラクターの後に値が設定されるため、コンストラクターの内部を呼び出すことはできませんtranslationToken
。
誰かがおそらくコード例で解決策を提供できればいいのにと思います。
そしてPS私は完全な注射初心者ですが、私の理解から、ジンはどういうわけか私の問題を解決するかもしれません。しかし、私は方法がわかりません。
ありがとうございました!