*
The moose likes GWT and the fly likes addHandler of custom widget not found when included in another widget Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Frameworks » GWT
Bookmark "addHandler of custom widget not found when included in another widget" Watch "addHandler of custom widget not found when included in another widget" New topic
Author

addHandler of custom widget not found when included in another widget

Roger Larry
Greenhorn

Joined: Jan 30, 2013
Posts: 2
Hi,

While learning GWT I wrote a customer widget StateCity (2 drop boxes & button). When it included in TestContainer, widget in a different GWT app (see code below), it gives a compiler error.

If StateCity widget is added to the RootPanel, by commenting lines 1 & 2 and uncommenting other lines, ti works fine.

I wanted to attach the widget (TestGWTWidget.jar) and the app (TestGWTSample.jar), but it won't let me attach.

[DEBUG] [testgwtsample] - Rebinding com.test.sample.client.TestContainer.TestContainerUiBinder
[DEBUG] [testgwtsample] - Invoking generator com.google.gwt.uibinder.rebind.UiBinderGenerator
[ERROR] [testgwtsample] - Field 'stateCity' does not have an 'addStateChange2Handler' method associated.
[ERROR] [testgwtsample] - Deferred binding failed for 'com.test.sample.client.TestContainer.TestContainerUiBinder'; expect subsequent failures
[ERROR] [testgwtsample] - Unable to load module entry point class com.test.sample.client.TestGWTSample (see associated exception for details)
[ERROR] [testgwtsample] - Failed to load module 'testgwtsample' from user agent 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; MS-RTC LM 8; McAfee)' at 127.0.0.1:60090

public class TestGWTSample implements EntryPoint
{
public void onModuleLoad()
{
1. final TestContainer testC = new TestContainer();
2. RootPanel.get().add(testC);
/*
final StateCity stateCity = new StateCity();
stateCity.setStates(getStates());
stateCity.addStateChange2Handler(new StateChange2Handler() {
public void onStateChange2 (StateChange2Event ev) {
Window.alert("Event");
}
});
RootPanel.get().add(stateCity);
*/
}
}

TestContainer.java
----------------------
public class TestContainer extends Composite
{
private static TestContainerUiBinder uiBinder = GWT.create(TestContainerUiBinder.class);

interface TestContainerUiBinder extends UiBinder<Widget, TestContainer> {}

@UiField StateCity stateCity;

public TestContainer() {
initWidget(uiBinder.createAndBindUi(this));
stateCity.setStates(getStates());
}

@UiHandler("stateCity")
void onStateChange2(StateChange2Event e)
{
if ( e.evType == StateChange2Event.StateCityEventType.StateChanged ) {
stateCity.setCities(getCities(e.newValue));
}
else if ( e.evType == StateChange2Event.StateCityEventType.Done ) {
Window.alert("Done");
}
}

private List<String> getStates ()
{
ArrayList<String> list = new ArrayList<String>();
list.add("... Select a state ...");
list.add("MA");
list.add("NH");
return list;
}

private List<String> getCities (String state)
{
ArrayList<String> list = new ArrayList<String>();
list.add("... Select a city ...");
if ( state.contains("...")) {
}
else if ( state.equals("MA")) {
list.add("Cambridge");
list.add("Boston");
}
else if ( state.equals("NH")) {
list.add("Nashua");
list.add("Salem");
}
return list;
}
}

TestContainer.ui.xml
--------------------
<!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"
xmlns:t3="urn:import:com.test3.client">
<ui:style>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<t3:StateCity ui:field="stateCity" />
</g:HTMLPanel>
</ui:UiBinder>

StateCity.java
----------------
public class StateCity extends Composite implements HasStateChange2Handler
{
private static StateCityUiBinder uiBinder = GWT.create(StateCityUiBinder.class);

interface StateCityUiBinder extends UiBinder<Widget, StateCity> {}

@UiField ListBox stateCB;
@UiField ListBox cityCB;
@UiField Button okB;

public StateCity() {
initWidget(uiBinder.createAndBindUi(this));
}

public StateCity(List<String> states) {
initWidget(uiBinder.createAndBindUi(this));
setStates(states);
}

@Override
public HandlerRegistration addStateChange2Handler(StateChange2Handler handler) {
return addHandler(handler, StateChange2Event.TYPE);
}

@UiHandler ("stateCB")
public void onChange (ChangeEvent event)
{
StateChange2Event ev = new StateChange2Event();
ev.evType = StateCityEventType.StateChanged;
ev.newValue = stateCB.getValue(stateCB.getSelectedIndex());
fireEvent(ev);
}

@UiHandler ("okB")
public void onClick (ClickEvent event)
{
StateChange2Event ev = new StateChange2Event();
ev.evType = StateCityEventType.Done;
fireEvent(ev);
}

public void setStates (List<String> list) {
stateCB.clear();
for ( String s : list ) {
stateCB.addItem(s);
}
}

public void setCities (List<String> list) {
cityCB.clear();
for ( String s : list ) {
cityCB.addItem(s);
}
}

public String getState () { return getSelected (stateCB); }
public String getCity () { return getSelected (cityCB); }

public String getSelected (ListBox listBox)
{
String ret = null;
int ind = listBox.getSelectedIndex();
if ( ind > -1 ) {
listBox.getValue(ind);
}
return ret;
}
}

StateCity.ui.xml
------------------
<!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>
.important {
font-weight: bold;
}
</ui:style>
<g:HTMLPanel>
<g:VerticalPanel height="80px" width="208px">
<g:HorizontalPanel width="208px" height="25px">
<g:Label text="State: " width="58px"/>
<g:ListBox width="123px" ui:field="stateCB"/>
</g:HorizontalPanel>
<g:HorizontalPanel height="25px" width="208px">
<g:Label text="City: " width="58px"/>
<g:ListBox width="123px" ui:field="cityCB"/>
</g:HorizontalPanel>
<g:Button width="123px" text="OK" ui:field="okB"/>
</g:VerticalPanel>
</g:HTMLPanel>
</ui:UiBinder>
-----------------------------------------------

Any help is greatly appreciated.

Regards,
- Roger
 
Consider Paul's rocket mass heater.
 
subject: addHandler of custom widget not found when included in another widget