Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Battosaiii
    Invité(e)
    [Rhino] Comment executer une commande javascript d'un code java ?
    Bonjour ,
    la question est dans le titre :
    Comment executer une commande javascript d'un code java ?
    a+

  2. #2
    Membre expert
    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.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Expert éminent sénior
    Salut,

    C'est à dire ? Pourrais-tu donner plus d'explication

    a++
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  4. #4
    Battosaiii
    Invité(e)
    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 ?

  5. #5
    Battosaiii
    Invité(e)
    ok je simplifie le truc. Je veux executer du javascript depuis java .
    Comment fait on ?

  6. #6

  7. #7
    Battosaiii
    Invité(e)
    Justement c'est pas tres clair dans Rhino. C'est pourquoi je demandais conseil.

  8. #8
    Membre confirmé
    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 :

    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);

    Hope this help. (surtout que j'ai pas tout compris aussi).

  9. #9
    Battosaiii
    Invité(e)
    Je ne comprends pourquoi tu definis salade et panier ?

  10. #10
    Membre confirmé
    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.

  11. #11
    Battosaiii
    Invité(e)
    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 ?

  12. #12
    Membre confirmé
    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 !

  13. #13
    Battosaiii
    Invité(e)
    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("")

  14. #14
    Battosaiii
    Invité(e)
    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:
    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);
        }


    J'ai remplace
    Object fObj = scope.get("load", scope); mais il me renvoir une java.nullexception.
    Quel peut etre le probleme ?
    A+

  15. #15
    Battosaiii
    Invité(e)
    Je voudrais ajouter au contexte avec Rhino une fois pour toute
    une commande javascript

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
     String x = "function smartLoad(fileName) {var a = smartLoad.setSmartLoaderWrapper(\"jsgen/JSWsdlModel.js\");var b = smartLoad.getAbsolutePath();load(b);}";


    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
    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);


    Dans l'ideal j'aurais voulu pousser dans le contexte de cette facon:
    mais je ne sais pas comment faire avec une fonction javascript.

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    ScriptableObject.putProperty(global, "smartLoader",
                Context.javaToJS(wsdlGenData.getSmartLoaderWrapper(), global));


    A+

  16. #16
    Candidat au Club
    Rhino
    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.

###raw>template_hook.ano_emploi###