java8使用nashorn与javascript直接交互

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_16414307/article/details/50497194


class C(){

public String getS1(){

   return _s1;

}

public String getS2(){

  return _s2;

}


public void setS1(String s){

  _s1=s;

}

public void setS2(String s){

  _s2=s;

}

//javascript可以直接for操作java中的list

public List<String> list=Arrays.asList("111","222","333");


}


//java8下才能编译

ScriptEngineManager scriptEngineManager =  new ScriptEngineManager();
ScriptEngine nashorn = scriptEngineManager.getEngineByName("nashorn"); 

//生成一个java对象,用于与javascript脚本交户  

        C cc=new C();
          cc.s1="java set s1";
          cc.setS2("java set s2");
          //将cc对象暴露给脚本
          SimpleBindings simpleBindings = new SimpleBindings();
          simpleBindings.put("cc", cc);

          //执行脚本
         nashorn.eval("print('cc.s1='+cc.getS1());for(var i in cc.list) print(i+'='+a[i]);cc.setS2('js set')",simpleBindings);

         System.out.println("cc.s2="+cc.getS2());


输出:

cc.s1=java set s1

0=111

1=222

3=333

cc.s2=js set


也就是很容易通过binding将java中的对象引入js的上下文,js可以随意操纵java的对象.


可以将一些计算类脚本用js来写,然后在java中动态执行.


典型的比如一个计算绩效工资的模块,可以让每个用户自己通过js脚本来实现复杂规则,而无需统一编码了

猜你喜欢

转载自blog.csdn.net/qq_16414307/article/details/50497194