Método Java nunca llamado mientras se usa JSON RPC en Struts2
-
03-07-2019 - |
Pregunta
Estoy intentando que funcione un código que un desarrollador anterior ha escrito. Sí, ahora él dejó la compañía. :-(
Tengo una llamada JSON RPC que se realiza desde el código JS. El JS funciona bien y el método de devolución de llamada recupera un objeto (no un objeto de error).
Pero el método en la clase Java nunca se ve afectado. Sin embargo, el método smd se ve afectado.
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>
Estoy sorprendido de por qué, o lo que me estoy perdiendo. He leído página del complemento JSON una y otra vez.
Creo que solo necesito otro par de ojos.
Nota: no hay errores en la consola de Tomcat, no hay errores de JS.
¿Alguien tiene alguna pista? Aclamaciones Jeff Porter
Solución
Olvidaste incluir el código javascript. Del ejemplo:
<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>
¿Está seguro de que llama a service.updateRowValueForField (clave, valor, nombre de campo) y no es algo diferente?
Además, tu método devuelve un vacío (por ejemplo, no devuelve nada). ¿Qué esperabas conseguir?
Otros consejos
La nueva versión soluciona mis problemas.
Supongo que necesita actualizar el método smd ()
para llamar a updateRowValueForField ()
en lugar de simplemente regresar inmediatamente. Parece que el desarrollador anterior nunca en realidad conectó los métodos.