javascriptjavagwtgwt-super-dev-mode

GWT Cannot read property 'example' of undefined


I'm learning GWT and currently I'm struggeling with RPC. I have a simple Project: a Label, a Textbox, an outputLabel and a Button. I want when the user enters his Name in the TextBox and press the "send" Button he will get a Message from the Server "Hello "+name+"Here speaks the Server" - stupid example. However in my CLient I have a package GUI and a Package Service and my entrypoint class

public class TestGwt270 implements EntryPoint {

public void onModuleLoad() 
{       
    TestGwt270ClientImpl clientImpls = new TestGwt270ClientImpl("/TestGwt270/testgwt270service");
    GWT.log("Main "+GWT.getModuleBaseURL() );
    RootPanel.get().add(clientImpls.getMainGUI());
}

MyGui:

public class MainGUI extends Composite 
{   
    private TestGwt270ClientImpl serviceImpl;

    private VerticalPanel vPanel;

    private TextBox inputTB;
    private Label outputLbl;

    public MainGUI(TestGwt270ClientImpl serviceImpl)
    {
        this.vPanel = new VerticalPanel();
        initWidget(vPanel);

        this.inputTB = new TextBox();
        this.inputTB.setText("Gib deinen Namen ein");
        this.outputLbl = new Label("Hier kommt der output");
        this.vPanel.add(this.inputTB);
        this.vPanel.add(this.outputLbl);

        Button sendBtn = new Button("send");
        sendBtn.addClickHandler(new MyClickhandler()); 
        this.vPanel.add(sendBtn);       
    }

    public void updateOutputLbl(String output)
    {
        this.outputLbl.setText(output);
    }

    private class MyClickhandler implements ClickHandler
    {
        @Override
        public void onClick(ClickEvent event) {
            // TODO Auto-generated method stub
            serviceImpl.sayHello(inputTB.getText());
        }       
    }   
}

TheService:

@RemoteServiceRelativePath("testgwt270service")
public interface TestGwt270Service extends RemoteService 
{
    String sayHello(String name);
}

AsyncService:

public interface TestGwt270ServiceAsync 
{
    void sayHello(String name, AsyncCallback<String> callback);
}

ClientInterface:

public interface TestGwt270ServiceClientInt 
{
    void sayHello(String name);
}

Client Implementation:

public class TestGwt270ClientImpl implements TestGwt270ServiceClientInt
{
    private TestGwt270ServiceAsync service;
    private MainGUI maingui;

    public TestGwt270ClientImpl(String url) 
    {
        GWT.log(url);
        // TODO Auto-generated constructor stub
        this.service = GWT.create(TestGwt270Service.class);
        ServiceDefTarget endpoint = (ServiceDefTarget) this.service;
        endpoint.setServiceEntryPoint(url);

        this.maingui = new MainGUI(this);
    }

    public MainGUI getMainGUI()
    {
        return this.maingui;
    }

    @Override
    public void sayHello(String name) {
        // TODO Auto-generated method stub
        this.service.sayHello(name, new MyCallback());
    }

    private class MyCallback implements AsyncCallback<String>
    {
        @Override
        public void onFailure(Throwable arg0) {
            // TODO Auto-generated method stub
            GWT.log("Failure");
            maingui.updateOutputLbl("An Error has occured");
        }

        @Override
        public void onSuccess(String arg0) {
            // TODO Auto-generated method stub
            GWT.log("Success");
            maingui.updateOutputLbl(arg0);
        }       
    }
}

ServerSideCode:

public class TestGwt270ServiceImpl extends RemoteServiceServlet implements TestGwt270Service
{
    @Override
    public String sayHello(String name) {
        // TODO Auto-generated method stub
        GWT.log("Hello " + name + "\nHier spricht der Server mit dir");
        return "Hello " + name + "\nHier spricht der Server mit dir";
    }
}

My Problem is, when I press the Button to send my Name to the server I get following Error:

HandlerManager.java:129 Uncaught com.google.gwt.event.shared.UmbrellaException: Exception caught: (TypeError) : Cannot read property 'sayHello_2_g$' of undefined

I don't know where this Error comes from and I hope you can help me.


Solution

  • I found the answer myself - I made a simple mistake:

    In the class MyGUI I got this:

    public class MainGUI extends Composite 
    { 
        private TestGwt270ClientImpl serviceImpl;
        ...
        public MainGUI(TestGwt270ClientImpl serviceImpl)
        {
            ...
    

    I forgot to assign the serviceImpl the Fix:

    public class MainGUI extends Composite 
    {   
        private TestGwt270ClientImpl serviceImpl;
        ...
        public MainGUI(TestGwt270ClientImpl serviceImpl)
        {
            this.serviceImpl = serviceImpl; //this line is the solution to my problem
            ...