2013-09-02 2 views
0

Im совершенно новый для Rhino и пытается преобразовать объект javascript в объект java, но не может этого сделать. Кажется, он не оценивает должным образом.Rhino Оценка объекта javascript в Java

Javascript, что у меня есть,

var myObject = new Object(); 
myObject.string1 = 'Hello'; 
myObject.string2 = 'World'; 
myObject.id = 1; 
var parser = new Packages.com.MyParser(); 
var returnStr = parser.PrintObj(myObject); 

И я следующий класс Java, что я хочу, чтобы оценить это,

public class Person extends ScriptableObject { 

    private int id; 
    private String string1; 
    private String string2; 

    public Person() {} 

    public void jsConstructor() { 
     this.string1 = ""; 
     this.string2 = ""; 
     this.id = 0; 
    } 

    public int getID() 
    { 
     return this.id; 
    } 

    public void jsSet_id(int value) 
    { 
     this.id = value; 
    } 

    public int jsGet_id() 
    { 
     return this.id; 
    } 

    public String jsGet_string1() 
    { 
     return this.string1; 
    } 

    public void jsSet_string1(String value) 
    { 
     this.string1 = value; 
    } 

    public String jsGet_string2() { 
     return this.string2; 
    } 

    public void jsSet_string2(String value) 
    { 
     this.string2 = value; 
    } 

    @Override 
    public String toString() { 
     return id + " " + string1 + " " + string2; 
    } 

    @Override 
    public String getClassName() { 
     return "Person"; 
    } 

И скелет моего парсера,

public class MyParser { 
    public String PrintObj(ScriptableObject obj) { 
     // Need to convert to Person object here 
     // Obviously casting doesnt work here 
     return null; 
    } 
} 

С благодарностью

ответ

2

ОК выяснил!

Прежде всего мне нужно было определить класс в javascript как. Сначала он жаловался, что не может найти класс без пространства имен «com». Если бы добавить, что ...

defineClass("com.Person") 
var myObject = new Person(); 
myObject.string1 = 'Hello'; 
myObject.string2 = 'World'; 
myObject.id = 1; 
var parser = new Packages.com.MyParser(); 
var returnStr = parser.PrintObj(myObject); 

, а затем в синтаксический анализатор я добавил следующее,

public String PrintObj(ScriptableObject obj) { 
    try { 
     Person pObj = (Person)Context.jsToJava(obj, Person.class); 
     System.out.println("Printing person: " + pObj); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^