2016-07-02 42 views
3

獲取所有綁定我創造了一些綁定,並將它們傳遞到發動機和全球範圍Java的犀牛 - 從javascrict

Bindings bindings = new SimpleBindings(); 
bindings.put... 
scriptEngine.setBindings(bindings, ScriptContext.ENGINE_SCOPE); 
Bindings bindings1 = new SimpleBindings(); 
bindings1.put... 
scriptEngine.setBindings(bindings1, ScriptContext.GLOBAL_SCOPE); 

現在的JS身邊,我想打印所有avalaible綁定在一個特定的範圍內。

我該怎麼做?

回答

1

您可以將綁定添加到保存對引擎的引用的對象,並創建用於從中解析鍵列表的方法。是這樣的:

package nashor; 

import java.io.FileNotFoundException; 
import java.io.FileReader; 

import javax.script.*; 

public class NashorMain { 

    public static void main (String[] args) throws ScriptException { 

     ScriptEngine nashorn = new ScriptEngineManager().getEngineByName("nashorn");  
     Bindings b = nashorn.createBindings(); 
     b.put("global", "GLOBAL"); 
     nashorn.setBindings(b, ScriptContext.GLOBAL_SCOPE); 

     b = nashorn.createBindings(); 
     b.put("info", new NashorInfo(nashorn)); 
     b.put("engineVar", "engine"); 
     nashorn.setBindings(b, ScriptContext.ENGINE_SCOPE); 

     nashorn.eval("newEngineVar = 'engine'"); 
     nashorn.eval("print('Engine vars:'); for each (var key in info.getEngineScopeKeys()) print (key)"); 
     nashorn.eval("print();print('Global vars:'); for each (var key in info.getGlobalScopeKeys()) print (key)"); 
    } 

    public static class NashorInfo { 

     private ScriptEngine scriptEngine; 

     public NashorInfo (ScriptEngine scriptEngine) { 
      this.scriptEngine = scriptEngine; 
     } 

     public String[] getEngineScopeKeys() { 
      return scriptEngine.getBindings(ScriptContext.ENGINE_SCOPE).keySet().toArray(new String[]{}); 
     } 

     public String[] getGlobalScopeKeys() { 
      return scriptEngine.getBindings(ScriptContext.GLOBAL_SCOPE).keySet().toArray(new String[]{}); 
     } 
    } 


} 

上面的程序的輸出是

Engine vars: 
info 
engineVar 
newEngineVar 
key 

Global vars: 
global