Hi All,
I wrote a sample app (based on Contacts2 ) to use the UiBinder and
using the MVP Pattern and initially my home presenter is getting
invoked and every thing works fine. Once i click on a link on the left
hand side panel i want to display a new view in the center panel of my
DocLayoutPanel. The events are getting fired properly and the event
Handler is getting the event and updating the view. But the UI is not
displaying the updated panel . I am not sure what's going wrong.
Here is the sample code i have..
HomeView.ui.xml:
[CODE]
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui">
<g:DockLayoutPanel unit='EM' >
<g:north size="5">
<g:HTML >
<h2> Test heading</h2>
</g:HTML>
</g:north>
<g:south size="3">
<g:HTML >
<h2> Test Footer </h2>
</g:HTML>
</g:south>
<g:west size="15">
<g:FlowPanel ui:field="navContainer"
width="100%"></g:FlowPanel>
</g:west>
<g:center size="12">
<g:FlowPanel>
<g:FlowPanel
ui:field="SummaryContainer" width="100%"></
g:FlowPanel>
<g:FlowPanel
ui:field="DetailsContainer" width="100%"></
g:FlowPanel>
</g:FlowPanel>
</g:center>
</g:DockLayoutPanel>
</ui:UiBinder>
[/CODE]
HomeView.java
[CODE]
import
org.finra.watchlists.client.controller.ApplicationController.Display;
public class HomeView extends Composite implements Display {
private static HomeViewUiBinder uiBinder = GWT
.create(HomeViewUiBinder.class);
@UiTemplate("HomeView.ui.xml")
interface HomeViewUiBinder extends
UiBinder<Widget, HomeView> {
}
@UiField
public
FlowPanel navContainer;
@UiField
public
FlowPanel summaryContainer;
public FlowPanel getNavContainer() {
return navContainer;
}
public void setNavContainer(FlowPanel navContainer) {
this.navContainer = navContainer;
}
public FlowPanel getSummaryContainer() {
return summaryContainer;
}
public HomeView() {
initWidget(uiBinder.createAndBindUi(this));
}
public Widget asWidget() {
return this;
}
}
[/CODE]
In my AppController 's onValueChange i have
[CODE]
public class ApplicationController implements
ValueChangeHandler<String>{
private final HandlerManager eventBus;
private final MyServiceAsync rpcService;
private HasWidgets container;
private Display view = null;
public interface Display extends View {
public FlowPanel getNavContainer();
public FlowPanel getSummaryContainer();
}
public ApplicationController(MyServiceAsync rpcService,
HandlerManager eventBus) {
this.eventBus = eventBus;
this.rpcService = rpcService;
this.view = new HomeView();
bind();
}
private void bind() {
History.addValueChangeHandler(this);
eventBus.addHandler(MenuItemSelectedEvent.TYPE,
new MenuItemSelectedEventHandler(){
@Override
public void
onMenuItemSelected(MenuItemSelectedEvent event) {
GWT.log(".onMenuItemSelected()
: selected Item =["+event.getId()
+"]");
if(event.getId().equals("NavItem1"))
{
GWT.log("Displaying the
SummaryView");
SummaryPresenter.Display summaryView = new SummaryView();
SummaryPresenter
summaryPresenter = new
SummaryPresenter(rpcService, eventBus, summaryView);
summaryPresenter.go(view.getSummaryContainer());
}
else
if(event.getId().equals("NavItem2"))
{
// Code to display the
details View.
}
}
});
}
@Override
public void onValueChange(ValueChangeEvent<String> event) {
String token = event.getValue();
GWT.log("onValueChange() : token =["+token+"]");
if (token.equals("home")) {
GWT.runAsync(new RunAsyncCallback() {
public void onFailure(Throwable caught) {
}
public void onSuccess() {
Display viewHome = new HomeView();
HomePresenter presenter = new
HomePresenter(rpcService,eventBus,viewHome);
presenter.go(container);
}
});
}
}
public void go(final HasWidgets container) {
this.container = container;
if ("".equals(History.getToken())) {
History.newItem("home");
}
else {
History.fireCurrentHistoryState();
}
}
}
[/CODE]
My Presenter Interface
[CODE]
public interface Presenter {
void go(final HasWidgets container);
}
[/CODE]
My Home Presenter:
[CODE]
public class HomePresenter implements Presenter{
private MyServiceAsync rpcService =null;
private HandlerManager eventBus = null;
private Display display = null;
public HomePresenter(MyServiceAsync rpcService,HandlerManager
eventBus,Display display) {
super();
this.rpcService = rpcService;
this.eventBus = eventBus;
this.display = display;
}
@Override
public void go(HasWidgets container)
{
// Just Update the Navigation Container...
container.clear();
container.add(display.asWidget());
NavigationPresenter.Display viewNav = new NavigationView();
NavigationPresenter navPresenter = new
NavigationPresenter(rpcService, eventBus, viewNav);
navPresenter.go(display.getNavContainer());
}
}
[/CODE]
My NavagationPresenter is:
[CODE]
public class NavigationPresenter implements Presenter{
public interface Display extends View
{
void setData(java.util.ArrayList<String> menuItemList);
String getSelectedItem();
HasSelectionHandlers<TreeItem> getMenuItemsList();
}
private Display display = null;
private MyServiceAsync rpcService =null;
private HandlerManager eventBus = null;
public NavigationPresenter(MyServiceAsync rpcService,HandlerManager
eventBus,Display display) {
super();
this.rpcService = rpcService;
this.eventBus = eventBus;
this.display = display;
bind();
rpcService.getNavigationMenuList(new
AsyncCallback<ArrayList<String>>() {
public void onSuccess(ArrayList<String> result)
{
NavigationPresenter.this.display.setData(result);
}
public void onFailure(Throwable caught) {
Window.alert("Error retrieving Menu Item List");
}
});
}
public void bind() {
display.getMenuItemsList().addSelectionHandler(new
SelectionHandler<TreeItem>() {
@Override
public void onSelection(SelectionEvent<TreeItem> event)
{
String selectedItem =
event.getSelectedItem().getText();
eventBus.fireEvent(new
MenuItemSelectedEvent(selectedItem));
}
});
}
@Override
public void go(HasWidgets container) {
container.clear();
container.add(display.asWidget());
}
}
[/CODE]
My Navigation View:
[CODE]
import NavigationPresenter.Display;
public class NavigationView extends Composite implements Display{
private static NavigationViewUiBinder uiBinder =
GWT.create(NavigationViewUiBinder.class);
@UiTemplate("NavigationView.ui.xml")
interface NavigationViewUiBinder extends UiBinder<Widget,
NavigationView> {}
@UiField FlowPanel listsMenus;
private Tree menuItems = new Tree();
public NavigationView(){
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public Widget asWidget() {
return this;
}
@Override
public void setData(ArrayList<String> menuItemList) {
for(String menuItem: menuItemList){
TreeItem item = new TreeItem(menuItem);
this.menuItems.addItem(item);
}
if(listsMenus==null){
listsMenus = new FlowPanel();
initWidget(listsMenus);
}
listsMenus.add(this.menuItems);
}
@Override
public String getSelectedItem() {
return this.menuItems.getSelectedItem().getText();
}
@Override
public HasSelectionHandlers<TreeItem> getMenuItemsList() {
return this.menuItems;
}
}
[/CODE]
And the UiBinder for Navigation View NavigationView.ui.xml:
[CODE]
<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:FlowPanel>
<g:FlowPanel ui:field="listsMenus" />
</g:FlowPanel>
</ui:UiBinder>
[/CODE]
Here is SummaryPresenter:
[CODE]
public class SummaryPresenter implements Presenter{
private Display display = null;
private MyServiceAsync rpcService =null;
private HandlerManager eventBus = null;
public interface Display extends View
{
}
public SummaryPresenter(MyServiceAsync rpcService,HandlerManager
eventBus,Display display)
{
super();
this.rpcService = rpcService;
this.eventBus = eventBus;
this.display = display;
}
@Override
public void go(HasWidgets container) {
container.clear();
container.add(display.asWidget());
}
}
[/CODE]
SummaryView.java
[CODE]
import SummaryPresenter.Display;
public class SummaryView extends Composite implements Display{
private static SummaryViewUiBinder uiBinder =
GWT.create(SummaryViewUiBinder.class);
@UiTemplate("SummaryView.ui.xml")
interface SummaryViewUiBinder extends UiBinder<Widget,SummaryView> {}
@UiField FlowPanel summary;
public SummaryView()
{
initWidget(uiBinder.createAndBindUi(this));
}
@Override
public Widget asWidget() {
return this;
}
}
[/CODE]
And SummaryView.ui.xml
[CODE]
<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:FlowPanel>
<g:Label> Summary Panel :</g:Label>
<g:FlowPanel ui:field="summary" />
</g:FlowPanel>
</ui:UiBinder>
[/CODE]
Sorry for the long post..Appreciate your help
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.