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
by archie
posted on 2011-10-06 12:17 archie2010 阅读(1197) 评论(0) 编辑 收藏 举报