2011-03-29 57 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