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

发布于 2024-07-07 18:14:42 字数 1146 浏览 9 评论 0原文

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

我有一个从 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 插件页面

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

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

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

I'm trying to get some code working that a previous developer has written.
Yep, he now left the company. :-(

I have a JSON RPC call being made from the JS code.
The JS all runs fine and the callback method gets an object back (not an error object).

But the method on the Java class never gets hit.
The smd method does get hit though.


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>

I'm stumped as to why, or what I'm missing.
I've read JSON plugin page over and over.

I think I just need another set of eyes.

Note: no errors in the Tomcat console, no JS errors.

Anyone got any clues?
Cheers
Jeff Porter

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

゛清羽墨安 2024-07-14 18:14:42

您忘记包含 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(key, value, fieldname) 而不是不同的东西吗?

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

You forgot to include the javascript code. From the example:

<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>

Are you sure you call service.updateRowValueForField(key, value, fieldname) and not something different?

Further, your method returns a void (e.g. doesn't return anything). What did you expect to get?

樱花细雨 2024-07-14 18:14:42

新版本解决了我的问题。

Google JSON 插件

New version fixes my problems.

Google JSON plugin

笨笨の傻瓜 2024-07-14 18:14:42

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

I'm guessing that you need to update the smd() method to actually call updateRowValueForField() rather than simply return immediately. Looks like the previous developer never actually hooked up the methods.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文