2011-03-29 25 views
4

出于测试目的,我想使用DialogBox登录到我的应用程序。GWT - 实现用于登录目的的对话框

这里的UiBinder的文件:

<!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> 
    </ui:style> 
    <g:HTMLPanel> 
     <g:Label>Username</g:Label> 
     <g:TextBox ui:field="username"></g:TextBox> 
     <g:Label>Password</g:Label> 
     <g:PasswordTextBox ui:field="password"></g:PasswordTextBox> 
     <g:Button ui:field="login">Login</g:Button> 
    </g:HTMLPanel> 
</ui:UiBinder> 

而且这里是我实现它:

public class Login extends DialogBox { 
    private static LoginUiBinder uiBinder = GWT.create(LoginUiBinder.class); 

    interface LoginUiBinder extends UiBinder<Widget, Login> {} 

    @UiField 
    TextBox username; 
    @UiField 
    PasswordTextBox password; 
    @UiField 
    Button login; 

    public Login() { 
     setHTML("Login"); 
     setWidget(uiBinder.createAndBindUi(this)); 
    } 
} 

现在我的问题是:这是做了正确的方法是什么?该文件似乎没有说如何做这种事情...

回答

6

这就是我所做的,它在生产中已经工作了好几个月。理解和重用非常容易。

我做了一个抽象的对话框,它有一个抽象方法onConfirm和一个内置的确认按钮。我还在UiBinder中包含一个接受小部件的面板,并覆盖setWidget函数以将小部件放入该内部面板。于是,每当我需要的东西,一个新的对话框,我可以只写:

final CustomWidget whicheverWidgetINeedRightNow = xyz; 
CustomDialog dialog = new CustomDialog() 
{ 
    @Override 
    protected void onConfirm() 
    { 
     process(whicheverWidgetINeedRightNow.getData()); 
    } 
}; 
dialog.setWidget(whicheverWidgetINeedRightNow); 

模板UiBinder的OK按钮是硬连接时,它的压调用onConfirm。漂亮!对于更复杂的情况,我会在自己命名的类中继承CustomDialog。

在我的应用程序中,可能有5或6种不同的情况,这对我来说非常有效,而且我不必重新设计或重新编写任何代码。

+1

+1伟大的解决方案!如果可以的话,我会加倍投票! – helpermethod 2011-03-29 12:38:12