FreeMarker 字符替换,插值 ${} ${!}空值处理 ${?}

FreeMarker 字符替换,插值 ${} ${!}空值处理 ${?}

${}

${属性名}可用于取值

在Spring中可在请求方法中将值放入 HttpServletRequest , Model , ModelMap , ModeAndView 中,
其中

HttpServletRequest , Model , ModelMap 可以注入,
ModeAndView 要自己new
注入的 ModelModelMap 实例相等==, 是同一个实例

例如

    @RequestMapping("showVolt")
    Object showVolt(Model m, ModelMap mm, HttpServletRequest req, HttpServletResponse resp) throws Exception{

        //可以放值到HttpServletRequest   HttpServletRequest可以注入
        req.setAttribute("req", "放入HttpServletRequest中的值");


        //可以放值到ModelAndView  ModelAndView要自己new
        ModelAndView mv = new ModelAndView("ac301/ac301.ftl");
        mv.getModel().put("mv", "放入ModelAndView中的值");

        // 可以放值到Model , Model可以注入
        m.addAttribute("m", "放入Model中的值");

		// model还有一个addAttribute单参数方法,可以不用取名设置key,
		// 用类名开头小写调用
		LinkedHashMap<Object,Object> moo = new LinkedHashMap<>();
        m.addAttribute(moo);

		// 可以放值到Model , Model可以注入
        mm.put("ModelMap的put", "可以用ModelMap的put方法放入");
        mm.addAttribute("ModelMap的Attribute", "可以用ModelMap的addAttribute方法放入");

		//注入的Model和ModelMap是同一个实例
        System.out.println("注入的Model是否==注入的ModelMap ? " + (m==mm) ); //结果是true
 
        return mv;
// new了ModelAndView 就返回 ModelAndView, 
// 没new 就直接返回地址字符串
		//return "ac301/ac301.ftl"
    }

在模板文件中调用

${req}  返回:放入HttpServletRequest中的值
${mv}   返回:放入ModelAndView中的值
${m}    返回:放入Model中的值
${linkedHashMap.x}  返回 moo.get(x)
${ModelMap的put}  返回 可以用ModelMap的put方法放入
${ModelMap的Attribute} 返回 可以用ModelMap的addAttribute方法放入

Model实例的setAttribute(Object 单参数)方法放入的实例, 可以通过类名第一个字母小写调用, 不用设置key 例如
Use 可以用 ${user} ,
AaBbCc 可以用 ${aaBbCc},
LinkedHashMap 可以用 ${linkedHashMap}
多个同类会取最后一个

  • ${map.key} 可以返回Map的key对应的值

  • ${public类实例名.方法名()} 可以得到方法的返回值, 比如getter方法

  • ${public类实例名.xxx} 可得到 实例.getXxx(); 只能调用getter方法,不能直接调用属性

可以使用内部类, 静不静态都可以, 但必须是public




${!}

${属性名} //null值会报错 , 可以使用感叹号!

${属性名!} 可以用于空值替换

  • ${PropertyName!} 如果PropertyName为空, 就输出空字符串(不输出)
  • ${PropertyName!"自定义默认值(null的替换值)必须加单引号或双引号"} 如果PropertyName为空, 就输出自定义的默认值
${name} //null值会报错, 新版好像不会报错,和加了感叹号一样不输出
${name!}  //null值为空
${name!'自定义默认值(null的替换值)必须加单引号或双引号'}
${name!"可以用双引号"}
${name!'可以用单引号'}
  • ${name} //null值会报错
  • ${name!} //null值为空
  • ${name!‘自定义默认值(null的替换值)必须加单引号或双引号’}
  • ${name!“可以用双引号”}
  • ${name!‘可以用单引号’}




${?}

${?} 的一些例子

插值结果为数字值

<#settion number_format="currency"/>
<#assign answer=42/>
${answer}
${answer?string}
${answer?string.number}
${answer?string.currency}
${answer?string.percent}
${answer}

执行输出结果:

$42.00
$42.00
42
$42.00
4,200%
${book.name?if_exists } //用于判断如果存在,就输出这个值 
${book.name?default(‘xxx’)}//默认值xxx 
${book.name!"xxx"}//默认值xxx 
${book.date?string('yyyy-MM-dd')} //日期格式 
${book?string.number} 20 //三种不同的数字格式 

插值结果为日期值

根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值。

${lastUpdated?string("yyyy-MM-dd HH:mm:ss zzzz")}
${lastUpdated?string("EEE, MMM d, ''yy")}
${lastUpdated?string("EEEE, MMMM dd, yyyy, hh:mm:ss a '('zzz')'")}
执行输出结果:

2008-04-08 08:08:08 Pacific Daylight Time
Tue, Apr 8, '03
Tuesday, April 08, 2003, 08:08:08 PM (PDT)

插值结果为布尔值

根据默认格式(由#setting指令设置)将表达式结果转换成文本输出.可以使用内建的字符串函数格式化单个插值。

<#assign foo=true/>
${foo?string("yes", "no")}
执行输出结果:
yes




${r’原样输出’} ${r"原样输出"}

在${}使用 小写字母r接两个单引号或两个双引号包裹的内容可以原样输出, 字母r只能用小写

  • ${r'想要原样输出的内容'} --用了单引号
  • ${r"想要原样输出的内容"} --用了双引号

例子:

${r"${r''}"} 得到 ${r''}
${r'${r""}'} 得到 ${r""}
${r"Hello"}  得到 Hello
${r'World'}  得到 World




收集一些例子

${emp.name?if_exists}        // 变量存在,输出该变量,否则不输出
${emp.name!}              // 变量存在,输出该变量,否则不输出
${emp.name?default("xxx")}        // 变量不存在,取默认值xxx  
${emp.name!"xxx"}            // 变量不存在,取默认值xxx

${"123
456"
?html}   // 对字符串进行HTML编码,对html中特殊字符进行转义 ${"str"?cap_first}    // 使字符串第一个字母大写 ${"Str"?lower_case} // 将字符串转换成小写 ${"Str"?upper_case} // 将字符串转换成大写 ${"str"?trim} // 去掉字符串前后的空白字符 $ { “你好$ {emp.name!}} //输出你好+变量名 $ {“hello”+ emp.name!} //使用+号来连接,输出你好+变量名 <#assign str =“abcdefghijklmn”/> //方法1 $ {str?substring(0,4} //输出abcd //方法2 $ { str [ 0 ] } $ {str [4]} //结果是ae $ {str [1..4]} //结果是bcde //返回指定字符的索引 $ {str?index_of("n"} 日期输出 $ {emp.date?string('yyyy -MM-dd'} //日期格式 <#setting number_format =“percent”/> //设置数字默认输出方式('percent',百分比) <#assign answer = 42 /> //声明变量回答42 #{answer} //输出4,200% $ {answer?string} //输出4,200% $ {answer?string.number} //输出42 $ {answer?string.currency} //输出¥42.00 $ {answer?string.percent} //输出4,200% #{answer} //输出42 数字格式化插值可采用#{expr; format}形式来格式化数字,其中格式可以是: mX:小数部分最小XMX:小数部分最大X位 如下面的例子: <#assign x = 2.582 /> <#assign y = 4 />{x; M2} //输出2.58 {y; M2} //输出4 {x; m2} //输出2.58 {Y; m2} //输出4.0{x; m1M2} //输出2.58 {x; m1M2} //输出4.0

你可能感兴趣的:(JAVA,#,Spring,Spingboot,SpringCould,java,sql,数据库)