Il metodo Java non ha mai chiamato durante l'utilizzo di JSON RPC in Struts2
-
03-07-2019 - |
Domanda
Sto cercando di far funzionare del codice scritto da uno sviluppatore precedente. Sì, ora ha lasciato la compagnia. : - (
Ho ricevuto una chiamata RPC JSON dal codice JS. JS funziona perfettamente e il metodo callback recupera un oggetto (non un oggetto errore).
Ma il metodo sulla classe Java non viene mai colpito. Il metodo smd viene comunque colpito.
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>
Sono sconcertato sul perché o su ciò che mi manca. Ho letto pagina del plug-in JSON più e più volte.
Penso di aver solo bisogno di un'altra serie di occhi.
Nota: nessun errore nella console Tomcat, nessun errore JS.
Qualcuno ha qualche indizio? Saluti Jeff Porter
Soluzione
Hai dimenticato di includere il codice javascript. Dall'esempio:
<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>
Sei sicuro di chiamare service.updateRowValueForField (chiave, valore, nome campo) e non qualcosa di diverso?
Inoltre, il metodo restituisce un vuoto (ad es. non restituisce nulla). Cosa ti aspettavi di ottenere?
Altri suggerimenti
La nuova versione risolve i miei problemi.
Suppongo che sia necessario aggiornare il metodo smd ()
per chiamare effettivamente updateRowValueForField ()
anziché semplicemente restituire immediatamente. Sembra che lo sviluppatore precedente non abbia mai effettivamente collegato i metodi.