3

Vaadin プロジェクトで SuperDevMode を設定しようとしています。

基本的に、この機能に関連する 3 つの問題があります。

次のウィジェットがあります (「新しい Vaadin ウィジェット」ウィザードを使用して作成され、クライアント側のウィジェット、コネクタ、状態、およびサーバー側のコンポーネントのコードの下にあります)。

// Widget:
public class CountedTextFieldWidget extends Composite {

    private TextBox textBox = new TextBox();
    private Label countLabel = new Label("0");
    private HorizontalPanel panel = new HorizontalPanel();

    public static final String CLASSNAME = "countedtextfield";

    public CountedTextFieldWidget() {
        initWidget(panel);
        setStylePrimaryName(CLASSNAME);
        textBox.setStylePrimaryName(CLASSNAME + "-field");
        countLabel.setStylePrimaryName(CLASSNAME + "-label");
        setStylePrimaryName(CLASSNAME);
        panel.add(textBox);
        panel.add(countLabel);
    }

    public String getText() {
        return textBox.getText();
    }

    public void setText(String text) {
        textBox.setText(text);
    }

    public void setCount(int count) {
        countLabel.setText("" + count);
    }

    public int getCount() {
        return Integer.parseInt(countLabel.getText());
    }

    // HandlerRegistration can be used to remove the key up handler (listener) 
    // added with this method
    public HandlerRegistration addKeyUpHandler(KeyUpHandler handler) {
        return textBox.addKeyUpHandler(handler);
    }

}

/********************************************************/
// Connector:
@Connect(CountedTextField.class)
public class CountedTextFieldConnector extends AbstractComponentConnector {

    public CountedTextFieldConnector() {
        getWidget().addKeyUpHandler(new KeyUpHandler() {

            @Override
            public void onKeyUp(KeyUpEvent event) {
                String text = getWidget().getText();
                getWidget().setCount(text.length());
            }           
        });
    }

    @Override
    protected Widget createWidget() {
        return GWT.create(CountedTextFieldWidget.class);
    }

    @Override
    public CountedTextFieldWidget getWidget() {
        return (CountedTextFieldWidget) super.getWidget();
    }

    @Override
    public CountedTextFieldState getState() {
        return (CountedTextFieldState) super.getState();
    }

    @Override
    public void onStateChanged(StateChangeEvent stateChangeEvent) {
        super.onStateChanged(stateChangeEvent);

        final String text = getState().text;
        getWidget().setText(text);
        getWidget().setCount(text.length());
    }

}

/********************************************************/
// State

public class CountedTextFieldState extends com.vaadin.shared.ui.textfield.AbstractTextFieldState {

    {
        primaryStyleName = null;
    }
}

/********************************************************/
// Server-side component:
public class CountedTextField extends com.vaadin.ui.TextField {

    @Override
    public String getValue() {
        return getState().text;
    }

    public void setValue(String value) {
        getState().text = value;
    }

    @Override
    public CountedTextFieldState getState() {
        return (CountedTextFieldState) super.getState();
    }
}

このウィジェットは次のようにレンダリングされます。

ここに画像の説明を入力

さて、私は Vaadin's wiki の次のガイドに従いました。

https://vaadin.com/wiki/-/wiki/Main/Using%20SuperDevMode

CodeServer は期待どおりに起動します。

The code server is ready.
Next, visit: http://localhost:9876/

しかし、プロジェクトを開いて?superdevmodeURL に追加すると、Recompilation failed...メッセージが表示され、ブラウザーのコンソールにいくつかのエラーが表示されます。

ここに画像の説明を入力

ここに画像の説明を入力

だから私の最初の問題はこの問題に関連しています:

1) 再コンパイルが時々失敗するのはなぜですか? そして、それらSEVERE: JSONP compile call failedとは何SEVERE: Timeout Excecutionですか?

その後... click to retry、ときどき superdevmode が開始されますが、投稿した前のスクリーンショットのようにカスタム ウィジェットがレンダリングされません。代わりに、標準の Vaadin の v-textfield を取得します...

ここに画像の説明を入力

2) なんてこった... なぜ? カスタム コンポーネントはどこにありますか?

localhost:9876を開き、ボタンをブックマーク ツールバーにドラッグしてDev Mode Onから、 をクリックしても同じ問題が発生することに気付きましたlocalhost:8080/project。カスタム ウィジェットが消えて、代わりに Vaadin の v-textfield ウィジェットが表示されます...

そしてEnable Source Map特徴について。ウィキで、彼らは言う:

Chrome で Java コードをデバッグできるようにするには、Chrome インスペクターを開き (右クリック -> 要素の検査)、ウィンドウの下隅にある設定アイコンをクリックし、[スクリプト] -> [ソース マップを有効にする] をオンにします。インスペクターを開いた状態でページを更新すると、[スクリプト] タブに JavaScript コードではなく Java コードが表示されます。

私のChromeでは、ウィンドウの下隅に設定アイコンがありません。右側の歯車アイコンをクリックしてGeneral -> Sourcesチェックしました(設定タブに一般的なエントリはEnable JavaScript Source Mapありません)。Enable source maps

Java ソースを確認できますが、それらはすべて GWT と Vaadin のコンポーネントのソースです。

ここに画像の説明を入力

だから私の3番目の問題と関連する質問:

3) カスタム ウィジェット コードも表示するにはどうすればよいですか?

注目してくれてありがとう!私が明確だったことを願っています。

4

1 に答える 1