Friday, February 8, 2013

Re: UiBinder and abstract class

See https://groups.google.com/d/msg/google-web-toolkit/x_GwoCkpwaI/7svZNGfjvLIJ and https://groups.google.com/d/topic/google-web-toolkit/M3OKndJIqGY/discussion

On Wednesday, March 21, 2012 12:13:01 PM UTC+1, Luis Costa wrote:
Hello all,
I'm having the same doubt, 
Damians, did you put your code working?
I'm having the same error.
Thanks,
Luis.

Segunda-feira, 1 de Fevereiro de 2010 11h22min10s UTC, damians escreveu:
Hello,

I've got a problem and i googled lots of pages to see if anyone got
the same problem but i didn't find anything.

I've got class AbstractDialog that extends DialogBox with some
standart buttons like OK CANCEL that are bound by UiBinder. I've got
another class that extends AbstractDialog with another declarative xml
file, that contains only the main content of that DialogBox.

When am trying to lunch application i got this error:
Rebinding <package>.<class>UiBinder
  Invoking com.google.gwt.dev.javac.StandardGeneratorContext@a51c3c
    Method 'ok' can not be bound. You probably missed
ui:field='okButton' in the template.

Method ok and UiHandler for button okVutton is declared in
AbstractDialog. From class that extends AbstractDialog the UiField is
not visible. Am i doing something wrong or i just didnt saw any
information that you can not extends an object tha got his own
UiBinder and extended class got their own UiBinder as well.

My code:

AbstractDialogBox.java

public abstract class AbstractDialogBox extends DialogBox
{
        private static AbstractDialogBoxUiBinder uiBinder = GWT.create
(AbstractDialogBoxUiBinder.class);

        interface AbstractDialogBoxUiBinder extends UiBinder<Widget,
AbstractDialogBox>
        {
        }

        @UiField Button okButton;
        @UiField Button cancelButton;
        @UiField Label emptyLabel;
        @UiField VerticalPanel main;

        public AbstractDialogBox()
        {
                setWidget(uiBinder.createAndBindUi(this));
                setStyleName("oe-DialogBox");

                okButton.setText("OK");
                cancelButton.setText("CANCEL");
        }

        public void setContent(Widget content)
        {
                main.add(content);
        }

        @UiHandler("okButton")
        void ok(ClickEvent e)
        {
                onOK();
        }

        @UiHandler("cancelButton")
        void cancel(ClickEvent e)
        {
                onCancel();
        }

        public void keyPress(KeyPressEvent event)
        {
                if (event.getCharCode() == 13)
                        onOK();
                else if (event.getCharCode() == 27)
                        onCancel();
        }

        public abstract void onOK();
        public abstract void onCancel();
}

AbstractDialog.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">

        <g:HTMLPanel>
        <table width="320px" cellspacing="0" cellpadding="3">
                <tr>
                        <td colspan="3"><g:VerticalPanel ui:field="main" width="100%"/></
td>
                </tr>
                <tr>
                        <td><g:Label ui:field="emptyLabel" width="140px"/></td>
                        <td><g:Button ui:field="okButton" styleName="dialogButton"/></td>
                        <td><g:Button ui:field="cancelButton" styleName="dialogButton"/></
td>
                </tr>
        </table>
        </g:HTMLPanel>
</ui:UiBinder>

LoginOptionDialog.java that extends AbstractDialog

public class LoginOptionDialog extends AbstractDialogBox
{
        private static LoginOptionDialogUiBinder uiBinder = GWT.create
(LoginOptionDialogUiBinder.class);
        interface LoginOptionDialogUiBinder extends UiBinder<Widget,
LoginOptionDialog>        {}

        @UiField Image icon;
        @UiField Label descIp;
        @UiField TextBox ip;
        @UiField HTMLPanel content;

        public LoginOptionDialog()
        {
                super();

                setText("Login options");

                descIp.setText("Server IP:");
                                ip.setText("Enter ip");

                                setContent(content);
        }

        @UiHandler("ip")
        public void press(KeyPressEvent event)
        {
                keyPress(event);
        }

        public void onCancel()
        {
                // restore ip text from application context
                hide();
        }

        public void onOK()
        {
                // set ip in application context
                hide();
        }
}

LoginOptionDialog.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">

 <g:HTMLPanel ui:field="content">
  <table width="100%" cellspacing="0" cellpadding="3">
   <tr>
    <td><g:Image ui:field="icon" url="gfx/ServerIp.png" width="23px"
height="23px"/></td>
    <td align="center"><g:Label ui:field="descIp"
styleName="dialogText" wordWrap="false" width="126px"/></td>
    <td><g:TextBox ui:field="ip" styleName="dialogText" width="165px"/
></td>
   </tr>
  </table>
 </g:HTMLPanel>

</ui:UiBinder>


Enviroment that am using to launch it:

public class Application implement EntryPoint
{
    private LoginOptionDialog loginOptionDialog;
    private Button optionButton;

    public void onModuleLoad()
    {
       optionButton = new Button("Options");
       optionButton.addClickHandler(new ClickHandler()
          {
               public void onClick(ClickEvent event)
               {
           loginOptionDialog.setPopupPosition(optionButton.getAbsoluteLeft()
- 100,
 
optionButton.getAbsoluteTop() - 60);

           loginOptionDialog.show();
               }
          });
       loginOptionDialog = new LoginOptionDialog();

        RootPanel.get("optionButton").add(optionButton);
    }
}

--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To unsubscribe from this group and stop receiving emails from it, send an email to google-web-toolkit+unsubscribe@googlegroups.com.
To post to this group, send email to google-web-toolkit@googlegroups.com.
Visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.
 
 

No comments:

Post a Comment