Rhino在java中设置NativeObject属性
我有一个javascript脚本,它在计算时返回一个NativeObjectRhino在java中设置NativeObject属性,java,rhino,Java,Rhino,我有一个javascript脚本,它在计算时返回一个NativeObject obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null) 我抛出了一个java.lang.UnsupportedOperationException。是否有其他方法可以更改对象值?您应该调用NativeObject.put(String,Scriptable,object)版本,而不是从Map界面继承的
obj = context.evaluateString(scope,"({age:3, name:'bob'})", "<source">, 1, null)
我抛出了一个java.lang.UnsupportedOperationException。是否有其他方法可以更改对象值?您应该调用
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;
}
});
}
}
公共类AddPropertyToObject{
公共静态void main(字符串[]args){
新建ContextFactory()。调用(新建ContextAction()){
@凌驾
公共对象运行(上下文ctx){
Scriptable scope=ctx.initStandardObjects();
试一试{
脚本实体=ctx.newObject(范围);
NativeObject结果=(NativeObject)ctx.EvaluateTestRing(
范围
“({年龄:3岁,姓名:'bob'})”,
“”,1,空);
结果。输入(“姓氏”,结果,“史密斯”);
对于(条目p:result.entrySet()){
System.out.println(p.getKey()+“:”+p.getValue());
}
}捕获(例外e){
e、 printStackTrace(System.err);
}
返回null;
}
});
}
}
我知道问题出在哪里,put(key,value)方法不起作用,它需要put(key,scriptable,value)方法。是的,我没有注意到你使用了Map
method:)
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;
}
});
}
}