2017-09-16 21 views
3

我正在使用帶有JSF和Beanshell腳本的Java。我想在beanshell中使用java類的字段和對象。我盡力從谷歌獲得幫助,但找不到任何有用的信息。 例如Java類字段,Beanshell中的對象使用

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import bsh.EvalError; 
import bsh.Interpreter; 

public class C { 

static Map<String,Object> map = new HashMap<String,Object>(); 
static List<String> list = new ArrayList<String>(); 
static Map<String,Integer> integerMap = new HashMap<String,Integer>(); 

public static void main(String[] arg) throws EvalError{ 
    list.add("Hello"); 
    list.add("World"); 
    Interpreter i = new Interpreter(); // Construct an interpreter 
    map.put("stringList", list);//in java 
    i.eval("map.put(\"stringList\", list)");// gives error 
    List list = (List) map.get("stringList"); 
    for(String str:(List<String>)list){ 
     System.out.println(str); 
    } 
    } 
} 

我想執行所有這些都可進行收集在Java中的BeanShell同一對象的操作。

Jmeter提供這樣的設施,用戶可以更新beanshell中的變量,並根據鏈接上給出的細節,似乎Jmeter使用字符串映射,我想做同樣的事情,但它與對象。

如果任何可用於實現我的要求的技術或框架中的任何技術都可以是java,beanshell,JSF或java中的其他可用選項,我將不勝感激。

回答

1

在JMeter的BeanShell的或更好的JSR223採樣(Java語言),你可以把對象JMeter的變量放:

JMeterVariables vars = JMeterContextService.getContext().getVariables(); 
vars.putObject("stringList", stringList); 

,並得到:

vars.getObject("stringList"); 

在Java中一般情況下,你需要添加可變爲Beanshell Interpreterset方法:

list.add("Hello"); 
    list.add("World"); 
    Interpreter i = new Interpreter(); // Construct an interpreter 

    map.put("stringList", list);//in java 
    try { 
     i.set("map", map); 
     i.set("list", list); 
     System.out.println(i.eval("map.put(\"stringList\", list)")); 
    } catch (EvalError e1) { 
     e1.printStackTrace(); 
    } 
+0

Jmeter只是一個我給的例子,但我不尋找Jmeter的幫助,我想在Java中實現這一點。我很感謝你的輸入 –

+0

看到我用Java更新的解決方案 – user7294900

+0

我接受你對這個線程的回答,是否有任何干淨的方式來實現它。我想避免在beanshell中設置變量,有沒有什麼辦法像Jmeter那樣保持它的乾淨。請參閱列表鏈接https://stackoverflow.com/questions/46267735/java-with-beanshell-to-access-fields-and-object-with-clean-code –