[template engine]StringTemplate的使用

本文介绍了一个模板引擎的应用实例,包括变量替换、自定义集合替换、条件判断等多种应用场景,并展示了如何通过模板引擎生成复杂的HTML表格及SQL查询语句。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 变量替换
public static void fun1() {
  StringTemplate st = new StringTemplate(
    "对象变量替换 姓名:$KeyList.Name$, 年龄:$KeyList.Age$ ");
  HashMap ht = new HashMap();
  ht.put("Name", "李四");
  ht.put("Age", "35");
  st.setAttribute("KeyList", ht);
  System.out.print(st.toString());
 }
2 自定义集合替换
public static void fun2() {
  StringTemplate st = new StringTemplate(
    "自定义集合替换 $List:{姓名:$it.Name$ 年龄:$it.Age$}$");
  st.setAttribute("List.{Name,Age}", "王二", "29");
  System.out.print(st.toString());

 }
3 对象变量替换
定义类
private static class User {
  String name;
  String age;

  public String getName() {
   return name;
  }

  public void setName(String name) {
   this.name = name;
  }

  public String getAge() {
   return age;
  }

  public void setAge(String age) {
   this.age = age;
  }
 }
public static void fun3() {
  User us = new User();
  us.name = "张三";
  us.age = "23";
  List<User> uss = new ArrayList<User>();
  uss.add(us);
  uss.add(us);
  uss.add(us);
  uss.add(us);
  uss.add(us);
  StringTemplate st = new StringTemplate(
    "<table>$Item:{<tr class=black><td>$it.name$</td></tr>},{<tr class=red><td>$it.age$</td></tr>};separator=/"/n/"$</table>");
  st.setAttribute("Item", uss);
  System.out.print(st.toString());
 }
   交叉替换
 public static void fun4() {
  User us = new User();
  us.name = "张三";
  us.age = "23";
  List<User> uss = new ArrayList<User>();
  uss.add(us);
  uss.add(us);
  uss.add(us);
  uss.add(us);
  uss.add(us);

  StringTemplateGroup sg = new StringTemplateGroup("GroupTest");
  sg.defineTemplate("RowRed",
    "<tr class=red><td>$it.Name$</td><td>$it.Age$</td></tr>/n");
  sg.defineTemplate("Rowblack",
    "<tr class=black><td>$it.Name$</td><td>$it.Age$</td></tr>/n");
  StringTemplate st = sg.defineTemplate("List",
    "<table>$Item:RowRed(),Rowblack()$</table>");
  st.setAttribute("Item", uss);
  System.out.print(st.toString());
 }
4 条件判断
public static void fun5() {
  StringTemplate st = new StringTemplate(
    "当前用户登陆状态: $if(IsAdmin)$ 用户登陆成功! $else$ 用户没有登陆! $endif$");
  st.setAttribute("IsAdmin", true);
  System.out.print(st.toString());
 }
5 sql语句实现
  theQuery.st内容
  SELECT $column; separator=","$ FROM $table$;
  public static void fun6() {
  // 一个sql语句的实现
  StringTemplateGroup group = new StringTemplateGroup("myGroup", "c:/");
  StringTemplate query = group.getInstanceOf("theQuery");
  query.setAttribute("column", "name");
  query.setAttribute("column", "email");
  query.setAttribute("table", "User");
  System.out.print(query.toString());
 }
6 使用AttributeRenderer
  private static class DateRenderer implements AttributeRenderer {
  public String toString(Object o) {
   SimpleDateFormat f = new SimpleDateFormat("yyyy.MM.dd");
   return f.format(((Calendar) o).getTime());
  }
 }
public static void fun7() {
  StringTemplate st = new StringTemplate("date: <created>",
    AngleBracketTemplateLexer.class);
  st.setAttribute("created", new GregorianCalendar(2005, 07 - 1, 05));
  st.registerRenderer(GregorianCalendar.class, new DateRenderer());

  String result = st.toString();

  System.out.print(result.toString());
 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值