2012-05-07 2 views
1

моя проблема касается моего проекта GWT. В моем клиентском пакете у меня есть 2 файла с именем Main.java (EntryPoint) и Registration.java (Composite). Класс регистрации - это просто пользовательский интерфейс для регистрации (он имеет текстовые поля и кнопку)Как я могу отправить информацию из композитного класса entrypoint?

В разделе регистрации есть регистрационная кнопка, которая берет всю информацию из регистрационной формы. Моя проблема здесь. как я могу отправить эту информацию из класса регистрации классу EntryPoint, когда пользователь нажимает кнопку?

это мой метод onModuleLoad;

....

Регистрация регистрация = новая регистрация();

 dockLayoutPanel.add(registration); 

....

ответ

1

Использование команда, например, у меня также есть интерфейс

public interface SuperPuperHandler<T> { 
    public void onFire(T t); 
} 

и при регистрации класса добавить сохранить обработчик:

public class Registration extends Composite{ 
     private SuperPuperHandler<MySavedObject> saveHandler; 

     public void addSaveHandler(SuperPuperHandler<MySavedObject> saveHandler){ 
      this.saveHandler=saveHandler; 
     } 

     ..... 
     savebutton.addClickHandler(new ClickHandler() { 
      public void onClick(ClickEvent clickEvent) { 
       if(saveHandler!=null){ 
        saveHandler.onFire(mysavedObject); 
       }    
      } 
     }); 

}

Так вот что делать в ваш EntryPoint

public class Main implements EntryPoint { 

     .... 
     Registration registration =new Registration(); 
     registration.addSaveHandler(new SuperPuperHandler<MySavedObject>(){ 
      public void onFire(MySavedObject t){ 
       // here is saved objects in registration form 
      } 
     }); 

} 
+0

работает, спасибо, но есть ли лучший способ получить информацию. Я хочу, чтобы я хотел создать веб-сайт, и на главной странице будет форма регистрации, если пользователь заполнит эту форму и зарегистрирует клики, композиция регистрации будет удалена, а другой составной вызов будет добавлен userPanel. На userPanel будут заполнены эти данные. Извините за мой английский – hellzone

0

Я думаю, вы должны использовать Observer шаблон. Ваш компонент регистрации должен иметь некоторый способ добавления слушателя для обработки события «пользователь нажал кнопку».

Ручная

Самый простой способ это просто определение сами:

interface ClickListener { 
    onButtonClicked(...); // use params if you want 
} 

и ваша регистрация компонент предлагают способ установить слушателя:

void addClickListener(ClickListener l) { 
    this.listener = l; 
} 

тогда, когда нажатие кнопки вы просто вызываете своего слушателя (интерфейс)

... 
if (listener != null) 
    listener.onButtonClicked(...); // pass arguments if you want 
... 

ваш EntryPoint должен зарегистрировать некоторый слушатель:

Registration r = ... 
r.addClickListener(new ClickListener() { 
    public void onButtonClicked(...) { 
     // do what you need 
    } 
} 

Использование GWT событий

В этом случае вы должны определить класс для события, и зарегистрировать обработчик в заданном пути, но она могла бы быть переборщиком. Если я найду документацию об этом. Я добавлю это к этому ответу.

Смежные вопросы