代码之家  ›  专栏  ›  技术社区  ›  jeff porter ichak khoury

在Struts2中使用JSON RPC时从未调用Java方法

  •  2
  • jeff porter ichak khoury  · 技术社区  · 16 年前

    我试图让以前的开发人员编写的一些代码正常工作。 是的,他现在离开了公司。 :-(

    我正在从JS代码中进行JSON RPC调用。 JS运行良好,回调方法返回一个对象(不是错误对象)。

    但是Java类上的方法永远不会受到攻击。 然而,smd方法确实受到了影响。


    public String smd()
    {
       return SUCCESS; // break point reaches here
    }
    
    @SMDMethod
    public void updateRowValueForField(String key, String value, String fieldname)
    {
       // We never get into this method.
    }
    

    <package name="EntryBarRPC" namespace="/" extends="star-default">
    
        <action name="ebToggleSelection" class="eboggleSelectionAction" method="smd">
            <interceptor-ref name="jsonStack">
                <param name="enableSMD">true</param>
            </interceptor-ref>
            <result type="json">
                <param name="enableSMD">true</param>
            </result>
        </action>
    </package>
    

    我困惑于为什么,或者我错过了什么。 我读过的 JSON plugin page 一遍又一遍。

    我想我只是需要另一双眼睛。

    注意:Tomcat控制台中没有错误,也没有JS错误。

    有人有任何线索吗? 干杯 杰夫·波特

    3 回复  |  直到 11 年前
        1
  •  2
  •   extraneon    16 年前

    你忘了包含javascript代码。从示例中可以看出:

    <s:url id="smdUrl" namespace="/nodecorate" action="SMDAction" />
    <script type="text/javascript">
        //load dojo RPC
        dojo.require("dojo.rpc.*");
    
        //create service object(proxy) using SMD (generated by the json result)
        var service = new dojo.rpc.JsonService("${smdUrl}");
    
        //function called when remote method returns
        var callback = function(bean) {
            alert("Price for " + bean.type + " is " + bean.price);
        };
    
        //parameter
        var bean = {type: "Mocca"};
    
        //execute remote method
        var defered = service.doSomething(bean, 5);
    
        //attach callback to defered object
        defered.addCallback(callback);
    </script>
    

    您确定您调用service.updateRowValueForField(键、值、字段名)而不是其他东西吗?

    此外,你的方法返回一个void(例如不返回任何东西)。你期望得到什么?

        2
  •  2
  •   jeff porter ichak khoury    16 年前

    新版本解决了我的问题。

    Google JSON plugin

        3
  •  1
  •   matt b    16 年前

    我猜你需要更新 smd() 实际调用的方法 updateRowValueForField() 而不是简单地立即返回。看起来之前的开发人员从未真正连接过这些方法。