The DialogBox API (http://google-web-toolkit.googlecode.com/svn/
javadoc/2.0/com/google/gwt/user/client/ui/DialogBox.html) notes that a
DialogBox can be defined as a UIBinder template as follows:
<g:DialogBox autoHide="true" modal="true">
<g:caption><b>Caption text</b></g:caption>
<g:HTMLPanel>
Body text
<g:Button ui:field='cancelButton'>Cancel</g:Button>
<g:Button ui:field='okButton'>Okay</g:Button>
</g:HTMLPanel>
</g:DialogBox>
What is the proper way of using this definition from Java code?
Supposing that the above definition is contained in
NotificationWindow.ui.xml, the following naive approach to
NotificationWindow.java does not work:
public class NotificationWindow extends Composite {
private static NotificationWindowUiBinder uiBinder =
GWT.create(NotificationWindowUiBinder.class);
interface NotificationWindowUiBinder extends UiBinder<Widget,
NotificationWindow> {}
@UiField DialogBox dialogBox;
public NotificationWindow() {
initWidget(uiBinder.createAndBindUi(this));
}
public void show() {
dialogBox.show();
}
}
If the EntryPoint-derived class calls:
(new NotificationWindow()).show();
then the following exception is logged:
java.lang.IllegalStateException: This widget's parent does not
implement HasWidgets
How is the <g:DialogBox> definition from the DialogBox API used
correctly from Java code?
Best regards,
Ovidiu
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-we...@googlegroups.com.
To unsubscribe from this group, send email to google-web-tool...@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
There are two possibilities: inheriting DialogBox or having a
DialogBox field (but then not inheriting a Widget).
Solution #1: inheriting a DialogBox
class NotificationWindow extends DialogBox {
...
public NotificationWindow() {
// we don't care about the returned value, it'll be 'this'
uiBinder.createAndBindUi(this);
}
@UiFactory
DialogBox thatsJustMe() {
// UiBinder will call this to get a DialogBox instance
// and this is the DialogBox instance we want to use
return this;
}
...
}
Solution #2: not inheriting DialogBox
// Note: do NOT inherit Composite, Widget or UIObject!
class NotificationWindow {
...
private DialogBox dialogBox;
public NotificationWindow() {
dialogBox = uiBinder.createAndBind(this);
}
public void show() {
dialogBox.show();
}
...
}
}