1.18 调用Java方法与属性
About 465 wordsAbout 2 min
2025-01-24
1.18 调用Java方法与属性
可以通过符号@来表明后面表达式调用是java风格,可以调用对象的方法,属性
${@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