使用UiBinder创建登录面板。如何让用户登录并显示其他小部件

时间:2011-08-17 17:08:23

标签: java gwt

我创建了一个具有登录面板的小部件: 这是代码:

<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
    xmlns:g="urn:import:com.google.gwt.user.client.ui">
    <ui:style>
        /* Add CSS here. See the GWT docs on UI Binder for more details */
    </ui:style>
        <g:VerticalPanel width="200px" height="auto">
            <g:Label text="Username:" width="100%" height="auto" />
            <g:TextBox ui:field="Username" width="100%" height="auto" />
            <g:Label text="Password:" width="100%" height="auto"/>
            <g:PasswordTextBox ui:field="Password" width="100%" height="auto" />
            <g:Cell horizontalAlignment="ALIGN_RIGHT">
                <g:Button text="Login" ui:field="button" height="25px"/>
            </g:Cell>
        </g:VerticalPanel>
</ui:UiBinder>

这是生成的类: 公共类LoginPanel扩展Composite实现HasText {

    private static LoginPanelUiBinder uiBinder = GWT
            .create(LoginPanelUiBinder.class);

    interface LoginPanelUiBinder extends UiBinder<Widget, LoginPanel> {
    }

    public LoginPanel() {
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiField
    Button button;

    @UiField
    TextBox Username;

    @UiField
    PasswordTextBox Password;

    public LoginPanel(String firstName) {
        initWidget(uiBinder.createAndBindUi(this));
    }

    @UiHandler("button")
    void onClick(ClickEvent e) {
        Window.alert("Hello!");
    }

    public String getUsername() {
        return Username.getText();
    }

    public String getPassword() {
        return Password.getText();
    }

    @Override
    public String getText() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void setText(String text) {
        // TODO Auto-generated method stub      
    }
}

我想在onModuleLoad上访问此类的click事件,以便我知道用户何时单击该按钮并已成功登录,因此我可以调用我创建的其他面板。这只是警报。

这是我第一次玩UiBinder,所以我可能会遗漏一些东西。

谢谢。

2 个答案:

答案 0 :(得分:2)

所以您希望您的LoginPanel在用户登录时通知您的主应用类?

这真是EventBus的工作。看看您需要的确切用例(AuthenticatedEvent):How to use the GWT EventBus

答案 1 :(得分:2)

首先,您需要将用户名密码发送到服务器。您可以使用RPC来实现此目的。然后在RPC回调(onsuccess)中,您可以显示UI的其余部分。 以下是您需要做的一个框架:

    private AsyncCallback loginCallback = new AsyncCallback(){
      public void onSuccess(){
            // show ui here
      }
      public void onFailure(Throwable caught) {
         Window.alert("debug: login failed, message from server: " + caught.getMessage());
      }
    }
    @UiHandler("button")
    void onClick(ClickEvent e) {
        Window.alert("debug: Sending login data to server");
        LoginServiceAsync loginAsync = ... 
        loginAsync.doLogin(getUsername(),getPasword(),loginCallback);
    }

您需要使用GWT的RPC工具创建LoginService RPC服务。