QLExpress上下文输出–新定义一个操作
本例子利用OperatorBase新创建一个操作,利用该操作将定义的字符串在上下文(IExpressContext)中输出。请看下面的例子:
public class ContextMessagePutTest {
class OperatorContextPut extends OperatorBase {
public OperatorContextPut(String name) {
this.name = name;
}
@Override
public OperateData executeInner(InstructionSetContext parent, ArraySwap list) {
String key = list.get(0).toString();
Object value = list.get(1);
parent.put(key, value);
return null;
}
}
首先我们先定义一个操作OperatorContextPut ,利用put方法将key,value存入集合中。
下面我们进行测试:
@Test
public void test() throws Exception {
ExpressRunner runner = new ExpressRunner();
OperatorBase op = new OperatorContextPut("contextPut");//新定义一个操作
runner.addFunction("contextPut", op);
String exp = "contextPut('success','false');contextPut('warning','提醒信息');contextPut('error','错误信息')";
IExpressContext<String, Object> context = new DefaultContext<>();
context.put("success", "true");
Object result = runner.execute(exp, context, null, false, true);
System.out.println(result);
System.out.println(context);
}
}
测试结果如下:
当执行System.out.println(result)时输出为null;
当执行 System.out.println(context)时输出为字符串里面定义的内容。
原因是我们新定义的操作将字符串放入context文本中了,因此需要输出context中的内容。