11
votes

Rhino: Comment retourner une chaîne de Java à JavaScript?

Comment utiliser Rhino retourner une chaîne de Java à JavaScript, tout ce que je reçois est org.mozilla.javascript.javanativeObject code> quand j'utilise xxx pré>

à l'intérieur de mon js fichier. p>

est-ce la bonne façon de le faire? p>

var jsString = String(new java.lang.String("test"));


2 commentaires

N'est-il pas possible d'utiliser un littéral à chaîne simple? var jstring = "test"; ?


Si var1 est java.lang.string, SimPile to javascript string est: "" + var1


5 Réponses :


1
votes

Les deux fonctionneront mais essaient d'abord ou traversent des tutoriels de rhinocéros https://developer.mozilla.org/fr/rhino_documentation


1 commentaires

Page non trouvée, veuillez mettre à jour



3
votes

En général, vous appelez context.javatojs qui convertit un objet Java à sa représentation la plus proche de JavaScript. Toutefois, pour les objets string , cette fonction renvoie la chaîne elle-même sans avoir besoin de l'envelopper. Donc, si vous retournez toujours une chaîne, vous n'avez pas besoin de faire quelque chose de spécial.


1 commentaires

Cela ne résout pas le problème. Pour la bonne solution, voir ma réponse.



2
votes

Bien que dans la plupart des cas, le type de chaîne Java retourné puisse être utilisé comme le type de chaîne JS dans le code JS, il n'a pas les mêmes méthodes!

En particulier, j'ai trouvé qu'il ne peut pas être utilisé dans un objet JS transmis à 'stringify ()' car il n'a pas la méthode Tojson ().

La seule solution que j'ai trouvée est d'ajouter explicitement l'ajout de "" dans le JS, pour convertir la chaîne Java en une chaîne JS. Je n'ai trouvé aucun moyen de coder la méthode Java pour renvoyer directement une bonne chaîne JS ... (comme context.javatojs () ne convertit pas une chaîne Java) Par exemple: xxx


0 commentaires

1
votes

Pour moi, c'est un bug de rhinocéros. L'astuce S + "" "JavaScript fonctionne, mais voici un patch rapide pour le corriger Java-côté Java - après cette ligne dans natifjavamethod.call () xxx pré>

Ajouter ce chèque pour le convertir en natif String JavaScript (c.-à-d. Typeof renvoie "String" non "Objet") P>

if (retval instanceof String) {
    return NativeJavaObject.coerceTypeImpl(String.class, retval);
}


0 commentaires

2
votes

Éteignez l'emballage des primitives, puis la valeur renvoyée dans votre expression sera une chaîne JS:

Context cx = Context.enter();
cx.getWrapFactory().setJavaPrimitiveWrap(false);


0 commentaires