BSF脚本引擎‘改变’Bean

它是一个支持在Java应用程序内调用脚本语言 (Script),并且支持脚本语言直接访问Java对象和方法的一个开源项目

介绍详见博文http://www.cnblogs.com/archie2010/archive/2011/07/12/2104403.html

 

BSF脚本管理器(BSFManager )注册一个Bean,通过脚本引擎(BSFEngine )执行一段脚本,可以在这个脚本中获取Bean的内容

它也可以修改这个Bean的内容,必要情况下可以持久化这个修改后的Bean

代码:

Bean  User.java

public class User implements Serializable {

private int id;
private String uname;
private String address;

//---------------

测试类 BSFTestChnageBean.java

/**
* js脚本改变Bean的内容
*
@author archie
*
*/
public class BSFTestChnageBean {

public static void main(String[] args) {

//Script脚本(JavaScript)
String script=
"function dealBean(){str = bsf.lookupBean('u');map = bsf.lookupBean('map');map.put('金额','表单的金额字段!');str.uname='修改后的名称';}";

try {
BSFManager bsfManager=new BSFManager();

//BSF脚本引擎
BSFEngine bsfEngine = bsfManager.loadScriptingEngine("javascript");

/**
* Bean
*/
User u=new User();
u.setId(1);
u.setUname("archie");
u.setAddress("ShangeHai");


bsfEngine.eval("javascript", 0, 0, script);

HashMap<String, Object> map=new HashMap<String, Object>();

//BSFManager注册Bean
bsfManager.registerBean("u", u);
bsfManager.registerBean("map", map);
//脚本引擎执行脚本(注释此行,则Bean不经过BSF处理)
Object result = bsfEngine.eval("javascript", 0, 0, "dealBean();");

System.out.println(map.get("金额"));

System.out.println("改变Bean后Name:"+u.getUname());

} catch (BSFException e) {
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
}

}



运行结果:

改变Bean后Name:修改后的名称
表单的金额字段!

Map和User 对象内容都已改变

 

注册的Bean中如有执久化方法,亦可以直接调用

如:

public static boolean executeSQL(String sql) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DBManager.getConnection();
pstmt = conn.prepareStatement(sql);

pstmt.execute();
} catch (SQLException e) {
Log.error(e.getMessage());
return false;
} finally {
DBManager.close(pstmt, conn);
}
return true;
}

可以直接在脚本中执行SQL


 

posted on 2011-10-06 12:17  archie2010  阅读(1191)  评论(0编辑  收藏  举报