2013-03-27 64 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