Comment utiliser Rhino retourner une chaîne de Java à JavaScript, tout ce que je reçois est à l'intérieur de mon js fichier. p> est-ce la bonne façon de le faire? p> org.mozilla.javascript.javanativeObject code> quand j'utilise
var jsString = String(new java.lang.String("test"));
5 Réponses :
Les deux fonctionneront mais essaient d'abord ou traversent des tutoriels de rhinocéros https://developer.mozilla.org/fr/rhino_documentation P>
Page non trouvée, veuillez mettre à jour
En général, vous appelez context.javatojs code>
qui convertit un objet Java à sa représentation la plus proche de JavaScript. Toutefois, pour les objets code> string code>, 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. P>
Cela ne résout pas le problème. Pour la bonne solution, voir ma réponse.
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 (). P>
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: p>
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 () 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);
}
É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);
N'est-il pas possible d'utiliser un littéral à chaîne simple?
var jstring = "test"; code>?
Si var1 est java.lang.string, SimPile to javascript string est: "" + var1