Bonjour ,
la question est dans le titre :
Comment executer une commande javascript d'un code java ?
a+
Bonjour ,
la question est dans le titre :
Comment executer une commande javascript d'un code java ?
a+
Certes mais il nous manque le contexte.
Ton code Java, c'est quoi ? Une servlet, une JSP, une application .... ?
Si c'est une JSP, rien de bien compliqué, une JSP n'est ni plus ni moins qu'une page HTML avec des scriptlets Java.
@++
Salut,
C'est à dire ? Pourrais-tu donner plus d'explication
a++
ok voila :
Je lance une commande javascript du type smart("filename") qui est un java host object. En gros smart va appele une classe java.
Dasn cette classe java je realise differentes operations. A la fin
je veux executer dans ce java host object une commande javascript du type
load("output").
Ai je ete clair ?
ok je simplifie le truc. Je veux executer du javascript depuis java .
Comment fait on ?
Justement c'est pas tres clair dans Rhino. C'est pourquoi je demandais conseil.
Effectivement, je trouve que la doc de Rhino n'est pas très claire, et le projet à l'air peu actif... c'est bizzarre pour un truc qui est sur un domaine en pleine ébullition, et qui je crois à été retenu pour être intégré à un JDK ?
Voici comment je lance un script rhino (donc javascript) depuis java :
Hope this help. (surtout que j'ai pas tout compris aussi).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 ScriptableObject o; String[] script = {"unscript.js"}; Main.getGlobal(); o = Main.getScope(); o.defineProperty("panier", _panier, ScriptableObject.DONTENUM); o.defineProperty("salade", _salade, ScriptableObject.DONTENUM); ScriptableObject.callMethod(o, "load", script);
Je ne comprends pourquoi tu definis salade et panier ?
Et pourquoi pas ?Je suis maître à bord, non ?
C'est moi l'chef !
Plus sérieusement, par cette combine, _salade et _panier sont des objets java que l'on pourra accéder en javascript, depuis le script script.js, en écrivant salade ou panier.
En gros ce que je voudrais faire c'est de javascript lancer une commande de type :
smartload("std/file.js")
Cette fonction fait la meme chose que load. La difference c'est que smartload
peut etre utiliser ou tu veux dans le repertoire. Smartload est une fonction que je veux creer moi meme.
Load peut charger des javascript source dans le meme dossier.
Je voudrais que ce soit possible d'invoquer cette fonction smartload d'un javascript. Je voudrais que smartload existe dans un java code. Tu vois ce que je veux dire ?
Je ne vois pas vraiment ce que tu veux dire, et encore moins à quoi cela servirait...
Peut être voudrais-tu disposer d'objets à la fois en java et en javascript ?... En ce cas, mon exemple de defineProperty est pas mal il me semble, et il y a aussi les ScriptableObject, dont tu peux trouver un exemple ici. Je sais bien que la doc est pas géniale, mais il faut la regarder, et je ne suis pas un expert de Rhino !
Ok je vais expliquer clairement.
je veux CREER une commande javascript :
smartload("std/utilities.js")
Cette commande va faire la meme chose que load("std/utilities.js")
mais en plus pointue. Les details ne sont pas importants. Ce qui est important
pour moi c'est comment creer smartload("")
Je voudrais utiliser la fonction load deja definie dans javascript.
Or dans cet exemple il utilise une fonction f qu il a definie dans son javascript.
Calling JavaScript functions
To get the function f, call it, and print the result, we add this code:
J'ai remplace
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Object fObj = scope.get("f", scope); if (!(fObj instanceof Function)) { System.out.println("f is undefined or not a function."); } else { Object functionArgs[] = { "my arg" }; Function f = (Function)fObj; Object result = f.call(cx, scope, scope, functionArgs); String report = "f('my args') = " + Context.toString(result); System.out.println(report); }
Object fObj = scope.get("load", scope); mais il me renvoir une java.nullexception.
Quel peut etre le probleme ?
A+
Je voudrais ajouter au contexte avec Rhino une fois pour toute
une commande javascript
Mas solution est biase car a chaque fois que je vais lance Rhino je vais executer evaluateString
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2String x = "function smartLoad(fileName) {var a = smartLoad.setSmartLoaderWrapper(\"jsgen/JSWsdlModel.js\");var b = smartLoad.getAbsolutePath();load(b);}";
Dans l'ideal j'aurais voulu pousser dans le contexte de cette facon:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 String x = "function smartLoad(fileName) {var a = smartLoad.setSmartLoaderWrapper(\"jsgen/JSWsdlModel.js\");var b = smartLoad.getAbsolutePath();load(b);}"; String buffer = x + jScript.toString(); Object result = ctx.evaluateString(glb, buffer, "", 1, null);
mais je ne sais pas comment faire avec une fonction javascript.
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ScriptableObject.putProperty(global, "smartLoader", Context.javaToJS(wsdlGenData.getSmartLoaderWrapper(), global));
Désolée mais je cherche un interpréteur de JS comme Firebug on m'a conseillé Rhino. Je voulais savoir il fait quoi exactement?
Merci par avance.
Séraphine
NB: La doc que j'ai trouvé est moins explicite à ce sujet.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager