簡體   English   中英

Vaadin MVP按鈕單擊不起作用

[英]Vaadin MVP button click not working

我是Vaadin的新手,但有問題。

我已經嘗試過這個: https//vaadin.com/web/magi/home/-/blogs/model-view-presenter-pattern-with-vaadin和示例應用程序還可以,但是當我嘗試創建類似的東西時不為我工作。

我有一個簡單的登錄表單(登錄,密碼字段和一個按鈕)。 而且按鈕有問題。 它沒有被觸發。 我可以單擊,但操作尚未開始。

這是我的代碼:

public interface LoginView {
    public void getNotification(String text);

    interface LoginViewListener{
        void loginButtonClick(String login, String password);
    }

    public void addListener(LoginViewListener listener);
}

public class LoginViewImpl extends CustomComponent implements LoginView,Button.ClickListener {

    private TextField loginField = new TextField();
    private PasswordField passwordField = new PasswordField();
    private Label loginLabel = new Label("Login:");
    private Label passwordLabel = new Label("Password:");
    private Button loginButton = new Button("Login");

    LoginViewListener listener;

    public LoginViewImpl(){
        VerticalLayout layout = new VerticalLayout();
        layout.setSizeFull();
        layout.addComponent(loginLabel);
        layout.addComponent(loginField);
        layout.addComponent(passwordLabel);
        layout.addComponent(passwordField);
        layout.addComponent(loginButton);
        setCompositionRoot(layout);
    }

    public void getNotification(String text){
        Notification.show(text);
    }

    @Override
    public void buttonClick(Button.ClickEvent event) {
        listener.loginButtonClick("jeden","dwa");
    }


    public void addListener(LoginViewListener listener) {
        this.listener = listener;
    }
}

public class LoginModel {
    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    private String login;
    private String password;
}


public class LoginPresenter implements LoginView.LoginViewListener {
    LoginModel model;
    LoginView view;

    public LoginPresenter(LoginModel model, LoginView view){
        this.model = model;
        this.view = view;

        view.addListener(this);
    }

    @Override
    public void loginButtonClick(String login, String password) {
        view.getNotification(login + " " + password);
    }
}

@SpringUI(path = "")
public class MainClass extends UI {

    @Override
    protected void init(VaadinRequest request) {
        LoginModel model = new LoginModel();
        LoginViewImpl view = new LoginViewImpl();

        new LoginPresenter(model, view);

        VerticalLayout layout = new VerticalLayout();

        layout.setSizeFull();
        layout.addComponent(view);
        setContent(layout);
    }
}

你能告訴我怎么了嗎? :(

問題在於LoginViewImpl不監聽loginButton事件。

MVP教程中查看如何創建按鈕:

// Add buttons and have them send click events
// to this class
for (String caption: operations)
    layout.addComponent(new Button(caption, this));

注意Button構造函數重載的用法, 該構造函數接受ClickListener 這種方式將視圖實現注冊為按鈕單擊事件的處理程序。

您應該在代碼中執行類似的操作:

public LoginViewImpl(){
    //skip
    loginButton.addClickListener(this);
    layout.addComponent(loginButton);
    setCompositionRoot(layout);
}     

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM