Java-Methode nie bei der Verwendung von JSON-RPC in Struts2 genannt
-
03-07-2019 - |
Frage
Ich versuche, einige Codes zum Laufen zu bringen, dass ein früherer Entwickler geschrieben hat. Ja, er ging jetzt das Unternehmen. : - (
Ich habe einen JSON RPC-Aufruf aus dem JS-Code gemacht. Die JS alle laufen gut und die Callback-Methode wird ein Objekt zurück (kein Fehler Objekt).
Aber die Methode auf der Java-Klasse wird nie getroffen. Die SMD-Methode allerdings schlagen bekommt.
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>
Ich bin, warum ratlos, oder was ich fehle. Ich habe gelesen, JSON-Plugin über und über.
Ich glaube, ich brauche nur einen weiteren Satz von Augen.
. Hinweis: keine Fehler in der Tomcat-Konsole keine JS Fehler
got Wer irgendwelche Hinweise? Prost Jeff Porter
Lösung
Sie haben vergessen, den Javascript-Code zu enthalten. Aus dem Beispiel:
<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>
Sind Sie sicher, dass Sie rufen service.updateRowValueForField (Schlüssel, Wert, Feldname) und nicht etwas anderes?
Ferner gibt Ihre Methode eine Lücke (z nichts zurück). Was hast du erwartet zu bekommen?
Andere Tipps
Neue Version behebt meine Probleme.
Ich vermute, dass Sie die smd()
Methode aktualisieren müssen tatsächlich updateRowValueForField()
zu rufen, anstatt einfach sofort zurück. Sieht aus wie die vorherigen Entwickler nie angeschlossen tatsächlich die Methoden.