问题
Below are the total files used in project. It is giving these errors
[ERROR] [cricketscore] - Deferred binding failed for 'test.client.UserDashboard.MyUiBinder'; expect subsequent failures
and
[ERROR] [cricketscore] - Unable to load module entry point class test.client.DashBoard (see associated exception for details).
Please help me resolve the problem in it.
Cricketscore.gwt.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
When updating your version of GWT, you should also update this DTD reference,
so that your app can take advantage of the latest GWT module capabilities.
-->
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit 2.5.0//EN"
"http://google-web-toolkit.googlecode.com/svn/tags/2.5.0/distro-source/core/src/gwt-module.dtd">
<module rename-to='cricketscore'>
<!-- Inherit the core Web Toolkit stuff. -->
<inherits name='com.google.gwt.user.User'/>
<!-- Inherit the default GWT style sheet. You can change -->
<!-- the theme of your GWT application by uncommenting -->
<!-- any one of the following lines. -->
<inherits name='com.google.gwt.user.theme.clean.Clean'/>
<!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> -->
<!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
<!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/> -->
<!-- Other module inherits -->
<!-- Specify the app entry point class. -->
<entry-point class='test.client.DashBoard'/>
<!-- Specify the paths for translatable code -->
<source path='client'/>
<source path='shared'/>
</module>
Dashboard.java
package test.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.ui.RootPanel;
public class DashBoard implements EntryPoint{
@Override
public void onModuleLoad() {
RootPanel.get().add(new UserDashboard());
}
}
UserDashboard.ui.xml
<!-- UserDashboard.ui.xml -->
<ui:UiBinder xmlns:ui='urn:ui:com.google.gwt.uibinder'
xmlns:g='urn:import:com.google.gwt.user.client.ui'
xmlns:my='urn:import:test.client' >
<g:HTMLPanel>
<my:CricketScores ui:field='scores' teamNames='AUS, SAF, WA, QLD, VIC'/>
</g:HTMLPanel>
</ui:UiBinder>
CricketScores.java
package test.client;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.user.client.ui.Composite;
public class CricketScores extends Composite{
public @UiConstructor CricketScores(String teamNames) {
this(teamNames.split("[, ]+"));
}
public CricketScores(String... teamNames) {
// TODO Auto-generated constructor stub
}
}
UserDashboard.java
package test.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiFactory;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Widget;
public class UserDashboard extends Composite {
interface MyUiBinder extends UiBinder<Widget, UserDashboard>{}
private static final MyUiBinder uiBinder = GWT.create(MyUiBinder.class);
private final String[] teamNames;
public UserDashboard(String... teamNames) {
this.teamNames = teamNames;
initWidget(uiBinder.createAndBindUi(this));
}
@UiFactory CricketScores makeCricketScores() {
return new CricketScores(teamNames);
}
}
回答1:
You have conflicting information in your code: a @UiConstructor
and a @UiFactory
(not conflicting actually, there's an order of precedence, but it can be confusing to the developer, i.e. you).
UiBinder will prefer the @UiFactory
over the @UiConstructor
, and your factory has no argument, so the teamNames
attribute from your XML is tentatively mapped to a setTeamNames
setter, which doesn't exist, hence the “Class CricketScores has no appropriate setTeamNames() method” error.
The problem is conceptual in your code: your UserDashboard
is constructed with a list of team names that it passes to the CricketScores
widget, so that widget shouldn't have a teamNames
attribute in the XML.
回答2:
I was getting same error and uiField(provided=true) was getting null but it got resolved when I created object of respective component in constructor
来源:https://stackoverflow.com/questions/15086594/deferred-binding-failed-gwt-using-uibinder