用BeanShell实现公式管理:使用Java脚本构建强大、灵活的公式管理系统
2010-03-18 00:00:00 来源:WEB开发网也许你曾经用解析字符窜的方法做过类似的编程工作,当你看到这里仅用一行代码就完成了对表达式的求值,是不是很惊讶?首先,实例化一个BeanShell解释器,然后将要使用的系统包import 进来,Interpreter.eval()方法就是对括号内的脚本求值或者说是解释执行脚本。然后,将formula的参数取出来,用 BeanShell脚本方式声明这些参数,再将parameters中参数对应的值再次用BeanShell脚本的方式赋值给对应的变量。请注意,如果这时候传入的参数名不正确或者是参数名对应的参数类型不符,就会抛出系统异常。如果参数设置成功,则调用formula的公式计算脚本。仅用一行代码,BeanShell完成了大部分的工作:i.eval(formula.getScript())。最后,从解释器中取得计算结果,该结果存放在 result变量中(可以查看清单1.中公式计算脚本)。现在是不是觉得BeanShell是一个好帮手?只要使用恰当,BeanShell将帮助你大大简化你的编程工作,这是一件非常快乐的事情。
另外,装载formula使用了JDOM技术,它从公式库中找到对应的公式,然后将该公式的参数列表以及计算脚本读出来组装成一个公式对象。见如下代码:
清单3.
public Formula loadFormula(String formulaID) {
Vector paras= new Vector();
try{
SAXBuilder builder= new SAXBuilder();
Document doc= builder.build(prefix+ "Formulas.xml");
//prefix是一个字符窜,用来指定公式库实际所在的位置
Element root= doc.getRootElement();
List formulas= root.getChildren("formula");
Iterator it= formulas.iterator();
Element formula= null;
while( it.hasNext()){
formula= (Element)it.next();
if(formula.getAttributeValue("id").equals(formulaID)){
break;
}
}
//获取参数列表
List parameters= formula.getChild("parameters").getChildren();
Iterator itp= parameters.iterator();
while(itp.hasNext()){
String[] s_para= new String[2];
Element e_para= (Element)itp.next();
s_para[0]= e_para.getAttributeValue("name");
s_para[1]= e_para.getAttributeValue("type");
paras.add(s_para);
}
Element script= formula.getChild("script");
String s_script= script.getTextTrim();
return new Formula(s_script, paras);
//将读出的信息组装成一个公式对象
}catch(Exception e){
System.out.println("loadFormula():"+ e.getMessage());
}
return null;
}
更多精彩
赞助商链接