2013-03-27 3 views
0

에 NativeObject 속성을 설정는 Rhino는 내가 평가하는 경우가 NativeObject를 반환하는 자바 스크립트 스크립트가 자바

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

나는 다음 중 하나 NativeObject로 OBJ 캐스팅 또는지도하고 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

나는 문제가 무엇인지를, 풋은 (키, 값) 메소드가 작동하지 않습니다, 그것은 넣어 필요 (키, 스크립트 가능, 값) 메소드. 건배 –

+0

오, 네가 그'Map' 메소드를 사용했다는 것을 눈치 채지 못했다 :) – Raffaele