Search code examples
javascriptjavazk

zk zAu.send function - org.zkoss.zk.ui.event.MouseEvent cannot be cast to org.zkoss.zk.ui.event.ForwardEvent


I am integrating jquery and zk project. My goal is to pass value from js/jquery side to java side but in vain. Here is the code I reference: use zAu to send data from client to server However, there exists the error:

java.lang.ClassCastException: org.zkoss.zk.ui.event.MouseEvent cannot be cast to org.zkoss.zk.ui.event.ForwardEvent

I have seen some other person saying that we must cast the mouseevent to forwardevent in order to get a NOT NULL getData() value.

At my java side:

public class TryHttpLenovo extends SelectorComposer<Component> {


    @Listen("onClick=#btnHttp")
    public void serverReceive(Event e) {    

        ForwardEvent forwardE = (ForwardEvent) e;
        System.out.println("forwardE.getData()"+forwardE.getData());
    }
}

In my http.zul:

<window apply="foo.TryHttpLenovo" xmlns:w="client">
<button id="btnHttp" w:onClick="sentToServer();">http send</button>
</window>

In my testhttp.js:

function sentToServer(){
    var wgt=zk.Widget.$('btnHttp');
    zAu.send(new zk.Event(wgt, "serverReceive", {foo: 'my data'}, {toServer:true}));
}

Solution

  • After several trial-and-error, I finally solve this!!!! The solution is to extend GenericForwardComposer. I also adjust some other things, but the only important change is to extend GenericForwardComposer instead of SelectorComposer.

    The @Listen annotation is not needed in my solution.

    in .java

    public class TryHttpV2 extends GenericForwardComposer { 
    
        public void onUser2$info(Event event) {
            ForwardEvent forwardE = (ForwardEvent) event;
            System.out.println("forwardE.getOrigin().getData(): " + forwardE.getOrigin().getData());
        }
    }
    

    in .js

    function sendToServer(){
        payload = "using generic composer";
        zAu.send(new zk.Event(zk.Widget.$(this), 'onUser2', payload));
    }
    

    in .zul

    <?page title="try using generic composer" contentType="text/html;charset=UTF-8"?>
    <?script src="/js/tryhttp_v2.js" ?>
    <zk xmlns="http://www.zkoss.org/2005/zul">
        <window id="info" apply="foo.TryHttpV2" xmlns:w="client"> 
            <button id="btnExec" w:onClick="sendToServer();" label="to be tested button" /> 
        </window>
    </zk>