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/
しかし、プロジェクトを開いて?superdevmode
URL に追加すると、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) カスタム ウィジェット コードも表示するにはどうすればよいですか?
注目してくれてありがとう!私が明確だったことを願っています。