Méthode Java jamais appelée lors de l'utilisation de RPC JSON dans Struts2
-
03-07-2019 - |
Question
J'essaie de faire fonctionner un code écrit par un développeur précédent. Oui, il a maintenant quitté l'entreprise. : - (
Je reçois un appel JSON RPC à partir du code JS. Le JS fonctionne bien et la méthode de rappel récupère un objet (et non un objet d'erreur).
Mais la méthode de la classe Java n'est jamais touchée. La méthode smd est néanmoins touchée.
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>
Je ne sais pas pourquoi ni ce qui me manque. J'ai lu la page du plug-in JSON à plusieurs reprises.
Je pense que j'ai juste besoin d'un autre regard.
Remarque: aucune erreur dans la console Tomcat, aucune erreur JS.
Quelqu'un a des indices? À votre santé Jeff Porter
La solution
Vous avez oublié d'inclure le code javascript. De l'exemple:
<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>
Êtes-vous sûr d'appeler service.updateRowValueForField (clé, valeur, nom de champ) et pas autre chose?
De plus, votre méthode renvoie un vide (par exemple, ne renvoie rien). Qu'espériez-vous obtenir?
Autres conseils
La nouvelle version corrige mes problèmes.
Je suppose que vous devez mettre à jour la méthode smd ()
pour appeler réellement updateRowValueForField ()
plutôt que de renvoyer immédiatement. On dirait que le développeur précédent n'a jamais vraiment connecté les méthodes.