在Struts2中使用JSON RPC时永远不会调用Java方法

在Struts2中使用JSON RPC时永远不会调用Java方法

问题描述:

我试图让一些以前的开发人员编写的代码工作。是的,他现在离开了公司。 :-(在Struts2中使用JSON RPC时永远不会调用Java方法

我有一个JSON RPC调用从JS代码正在取得进展。 的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错误。

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

您忘记了包含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(例如不返回任何东西)。你期望得到什么?

我猜你需要更新smd()方法实际调用updateRowValueForField()而不是简单地立即返回。看起来以前的开发者从来没有真正联系过这些方法。

新版本修复了我的问题。

Google JSON plugin

+0

我知道它的旧帖子......但无论哪种...我在2.2.3和JavaScript中,当我说service.doSomething ...它说DoSomething的我不能够得到这个工作没有定义......听起来合乎逻辑,因为没有方法说明Json服务中的某些东西。那个例子是不正确的..在那里缺少一些东西...... – 2011-12-20 17:16:14