2013-03-27 79 views
0

我有一个评估时返回NativeObject一个javascript脚本犀牛设置NativeObject属性在java中

obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null) 

然后我投OBJ无论是作为NativeObject或地图,然后运行put方法

castObj.put("surname","smith") 

我得到抛出的java.lang.UnsupportedOperationException。有没有另一种方法可以改变对象的值?

回答

3

你应该叫NativeObject.put(String, Scriptable, Object)版本,而不是从Map接口继承了put(String, Object)

public class AddPropertyToObject { 
    public static void main(String[] args) { 
     new ContextFactory().call(new ContextAction(){ 

      @Override 
      public Object run(Context ctx) { 
       Scriptable scope = ctx.initStandardObjects(); 
       try { 
        Scriptable entity = ctx.newObject(scope); 

        NativeObject result = (NativeObject) ctx.evaluateString(
         scope, 
         "({age:3, name:'bob'})", 
         "<inline>", 1, null); 

        result.put("surname", result, "Smith"); 

        for (Entry<Object, Object> p : result.entrySet()) { 
         System.out.println(p.getKey() + ": " + p.getValue()); 
        } 

       } catch (Exception e) { 
        e.printStackTrace(System.err); 
       } 
       return null; 
      } 
     }); 
    } 
} 
+0

我知道是什么问题是,看跌期权(键,值),方法是不行的,它需要的放(关键,可脚本化,价值)的方法。干杯 – 2013-03-27 18:05:05

+0

哦,是的,我没有注意到你使用了'Map'方法:) – Raffaele 2013-03-27 18:05:37