zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    在ASP.NET GridView 中使用e.CommandArgument传递参数
    循环处理之while and do while
    MzTreeView(梅花雪)完全攻略
    FreeTextBox使用详解
    委托、线程的用法
    Master Theorem
    python jsonpath 语法总结
    python + zmail 邮件发送
    python的yaml语法
    unittest单元测试框架总结
  • 原文地址:https://www.cnblogs.com/archie2010/p/2199856.html
Copyright © 2011-2022 走看看