[英]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.