不灭的焱

革命尚未成功,同志仍须努力下载JDK17

作者:php-note.com  发布于:2022-06-19 15:52  分类:Java框架/系统  编辑

 官网手册

常用片段(1):

// Beetl模板代码
${task['startTime'], dateFormat="yyyy-MM-dd HH:mm:ss"}

// Java服务端代码
if (ObjectUtil.isNotEmpty(task) && ObjectUtil.isNotEmpty(task.getStartTime())) {
    // 时间格式:yyyy-MM-dd HH:mm:ss
    params5.put("defaultValue", LocalDateTimeUtil.format(task.getStartTime(), DatePattern.NORM_DATETIME_PATTERN));
}

常用片段(2):

<%
if (isNotEmpty(userList)) {    
	for(user in userList) {
	 	print(userLP.index);
	 	print(user.name);
	}
} else {
	print('暂无记录');
}
%>

<%
if (isNotEmpty(userList)) {    
	for(entry in map) {
	    var key = entry.key;
	    var value = entry.value;
	    print(value.name);
	}
} else {
	print('暂无记录');
}	
%>

 




调用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();
%>

注意:上述的user实例,是通过模板变量传参,传递过来的,如

Map<String, Object> args = new LinkedHashMap<>();
User user = new User();
user.setUserId(100);
args.put("user", user);
return BeetlHelper.parseTpl("/framework_web/widget/select/bootstrapDualListbox", args);

可以调用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 表达式

摘自:https://www.kancloud.cn/xiandafu/beetl3_guide/2138960

 




 

4.1.1 常用内置方法

  • date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yyyy-MM-dd" )} 返回指定日期
  • print 打印一个对象 print(user.name);
  • println 打印一个对象以及回车换行符号,回车换号符号使用的是模板本身的,而不是本地系统的。如果仅仅打印一个换行符,则直接调用println() 即可
  • printFile 直接答应文件,文件路径以模板根目录为相对目录,printFile("/common/header.html");
  • nvl 函数nvl,如果对象为null,则返回第二个参数,否则,返回自己 nvl(user,"不存在")
  • isEmpty 判断变量或者表达式是否为空,变量不存在,变量为null,变量是空字符串,变量是空集合,变量是空数组,此函数都将返回true
  • isNotEmpty 同上,判断对象是否不为空
  • has 变量名为参数,判断是否存在此全局变量,如 has(userList),类似于1.x版本的exist("userList"),但不需要输入引号了
  • assert 如果表达式为false,则抛出异常
  • trim 截取数字或者日期,返回字符,如trim(12.456,2)返回"12.45",trim(date,'yyyy')返回"2017"
  • trunc 截取数字,保留指定的小数位,如trunc(12.456,2) 输出是12.45.不推荐使用,因为处理float有问题,兼容原因保留了
  • decode 一个简化的if else 结构,如 ${decode(a,1,"a=1",2,"a=2","不知道了")},如果a是1,这decode输出"a=1",如果a是2,则输出"a==2", 如果是其他值,则输出"不知道了"
  • debug 在控制台输出debug指定的对象以及所在模板文件以及模板中的行数,如debug(1),则输出1 [在3行@/org/beetl/core/lab/hello.txt],也可以输出多个,如debug("hi",a),则输出hi,a=123,[在3行@/org/beetl/core/lab/hello.txt]
  • parseInt 将数字或者字符解析为整形 如 parseInt("123");
  • parseLong 将数字或者字符解析为长整形,parseInt(123.12);
  • parseDouble 将数字或者字符解析为浮点类型 如parseDouble("1.23")
  • range 接收三个参数,初始值,结束值,还有步增(可以不需要,则默认为1),返回一个Iterator,常用于循环中,如for(var i in range(1,5)) {print(i)},将依次打印1234。
  • flush 强制io输出。
  • json 将对象转成json字符串,如 var data = json(userList) 可以跟一个序列化规则 如 var data = json(userList,"[*].id:i"),具体参考 https://git.oschina.net/xiandafu/beetl-json
  • pageCtx 仅仅在web开发中,设置一个变量,然后可以在页面渲染过程中,调用此api获取,如pageCtx("title","用户添加页面"),在其后任何地方,可以pageCtx("title") 获取该变量
  • type.new 创建一个对象实例,如 var user = type.new("com.xx.User"); 如果配置了IMPORT_PACKAGE,则可以省略包名 type.new("User")
  • type.name 返回一个实例的名字,var userClassName = type.name(user),返回"User"
  • global 返回一个全局变量值,参数是一个字符串,如 var user = global("user_"+i);
  • cookie 返回指定的cookie对象 ,如var userCook = cookie("user"),allCookies = cookie();

4.1.2 字符串相关方法

strutil方法对参数均不做空指针检测,你可自定义方法来覆盖这些内置的方法

  • strutil.startWith ${ strutil.startWith("hello","he")} 输出是true
  • strutil.endWith ${ strutil.endWith("hello","o")} 输出是true
  • strutil.length ${ strutil. length ("hello")} 输出是5
  • strutil.subString ${ strutil.subString ("hello",1)} 输出是"ello"
  • strutil.subStringTo ${ strutil.subStringTo ("hello",1,2)} 输出是"e"
  • strutil.split ${ strutil.split ("hello,joeli",",")} 参数第一个是字符串,第二个是正则表达式。输出是数组:返回第一个是"hello",第二个是"joelli"
  • strutil.contain ${ strutil.contain ("hello,"el")} 输出是true
  • strutil.toUpperCase ${ strutil.toUpperCase ("hello")} 输出是HELLO
  • strutil.toLowerCase ${ strutil.toLowerCase ("hello")} 输出是hello
  • strutil.replace ${ strutil.replace ("hello","lo","loooo")} 输出是helloooo
  • strutil.format ${ strutil.format ("hello,{0}, my age is {1}","joeli",15)} 输出是hello,joeli, my age is 15。具体请参考http://docs.oracle.com/javase/6/docs/api/java/text/MessageFormat.html
  • strutil.trim 去掉字符串的尾部空格
  • strutil.formatDate var a = strutil.formatDate(user.bir,'yyyy-MM-dd')};
  • strutil.index var index = strutil.index("abc","a"); 返回 索引0
  • strutil.lastIndex var index = strutil.lastIndex("aba","a"); 返回索引2

4.1.3 数组相关方法

  • array.range 返回数组或者Collection一部分,接受三个参数,第一个是数组或者Collection子类,第二,三个参数分别是起始位置
  • array.remove 删除某个数组或者Collection的一个元素,并返回该数组或者Collection.第一个是数组或者Collection子类,第二个参数是元素
  • array.add 向数组或者Collection添加一个元素,并返回该数组或者Collection。第一个是数组或者Collection子类,第二个参数是元素
  • array.contain 判断数组或者元素是否包含元素,如果包含,返回true。否则false。第一个是数组或者Collection子类,第二个参数是元素
  • array.toArray 转化成数组,如array.toArray(1,2,"a");
  • array.collection2Array 将Java集合转化为数组 array.collection2Array([1,2,''])

4.1.4 正则表达式相关方法

  • reg.match(str,regex) str为需要处理的字符串,regex是表达式
  • reg.replace(str,regex,replace) str为需要处理的字符串,regex是表达式,替换的字符串替换字符串
  • reg.find(str,regex) 返回找到的符合表达式的第一个字符串,否则返回空字符串
  • reg.findList(str,regex) 找到所有符合表达式的字符串,否则返回空列表
  • reg.split(str,regex) 对字符串进行切分,返回列表
  • reg.split(str,regex,limit) 同上,limit是最多返回个数

 

相关文章:

Beetl自定义方法以及直接访问java类方法

 

 

摘自:https://www.kancloud.cn/xiandafu/beetl3_guide/2138994