On Feb 9, 12:00 pm, Ovidiu Gheorghies <[email protected]> wrote:
> Hello,
>
> 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?
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();
}
...
}
--
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.