GWT — реализация диалогового окна для входа в систему

В целях тестирования я хочу использовать DialogBox для входа в свое приложение.

Вот файл 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));
    }
}

Теперь мой вопрос: это правильный способ сделать это? В документации, похоже, ничего не сказано о том, как это сделать...


person helpermethod    schedule 29.03.2011    source источник


Ответы (1)


Это то, что я делаю, и это отлично работает в производстве в течение нескольких месяцев. Это очень легко понять и использовать повторно.

Я сделал абстрактный диалог с тем же шаблоном, который имеет абстрактный метод onConfirm и встроенную кнопку подтверждения. Я также включаю в UiBinder панель для приема виджета и переопределяю функцию setWidget, чтобы поместить виджет на эту внутреннюю панель. Затем, когда мне нужен новый диалог для чего-то, я могу просто написать:

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

Кнопка ok в шаблоне UiBinder жестко связана с вызовом onConfirm при ее нажатии. Отлично! Для более сложных случаев я бы создал подкласс CustomDialog в собственном именованном классе.

Это сработало для меня, может быть, в 5 или 6 различных ситуациях в моем приложении, и мне не нужно ничего переделывать или перекодировать.

person Riley Lark    schedule 29.03.2011