2017-05-19 4 views
0

Vaadin에 새로운 기능이있어서 문제가 있습니다.Vaadin MVP 버튼이 작동하지 않음

나는 이것을 시도했습니다 : 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); 
    } 
} 

당신이 뭐가 잘못 됐는지 말해 줄 수 : 여기

내 코드? :(

+0

addClickListener() is missing – d2k2

답변

1

문제는 LoginViewImplloginButton 이벤트를 수신하지 않는다는 것입니다

버튼을 the MVP tutorial에서 생성하는 방법을 체크 아웃 :..

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

공지 사항 ClickListener을 받아 a Button constructor overload의 사용이 way view 구현은 버튼 클릭 이벤트의 핸들러로 등록됩니다.

코드에서 비슷한 것을해야합니다 :

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

그냥 클릭 해주세요 ... 정말 고마워요! :) – user2476195