🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## 1.18 调用Java方法与属性 可以通过符号@来表明后面表达式调用是java风格,可以调用对象的方法,属性 ```javascript ${@user.getMaxFriend(“lucy”)} ${@user.maxFriend[0].getName()} ${@com.xxxx.constants.Order.getMaxNum()} ${@com.xxxx.User$Gender.MAN} <% var max = @com.xxxx.constants.Order.MAX_NUM; var c =1; var d = @user.getWife(c).getName(); %> ``` 可以调用instance的public方法和属性,也可以调用静态类的属性和方法 ,需要加一个 @指示此调用是直接调用class,其后的表达式是java风格的。 - GroupTemplate可以配置为不允许直接调用Class以增强安全性,具体请参考配置文件. - 也可以通过安全管理器配置到底哪些类Beetl不允许调用,具体请参考高级用法。默认情况,`java.lang.Runtime`,和 `java.lang.Process` 不允许在模板里调用。你自己的安全管理器也可以配置为不能直接访问DAO类(避免了以前 JSP 可以访问任意代码带来的危害) - 重要:请按照 Java 规范写类名和方法名,属性名。这样便于beetl识别到底调用的是哪个类,哪个方法。否则会抛出错误 - 可以省略包名,只用类名。beetl将搜索包路径找到合适的类(需要设置配置`IMPORT_PACKAGE=包名.;包名.`,包名后需要跟一个`.`, 或者调用Configuration.addPkg)方法具体请参考附件配置文件说明 - 内部类(包括枚举)访问同java一样,如User类有个内部枚举类Gender,访问是User$Gender - 表达式是java风格,但参数仍然是 Beetl表达式,比如 `@user.sayHello(user.name)`。这里 `user.sayHello` 是 Java调用,`user.name` 仍然是 Beetl 表达式 注意:3.17版本后,由于安全原因,默认不在允许调用Java方法和属性,如果需要,可以配置 ``` NATIVE_CALL = true NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager ```