美文网首页
FreeMarker+BootStrap技术总结

FreeMarker+BootStrap技术总结

作者: 帅可儿妞 | 来源:发表于2018-06-23 15:13 被阅读324次

已经不知道多长时间没有碰到让我做页面的问题了, 于是乎,灾难来了,让我做运营后台的页面,想了一想还是复习复习吧,正好整理一下很久之前用过的技术。。。FreeMarker的Debug参考这里这里

一、FreeMarker的使用

  1. FreeMarker中的模型:
    • hash(如Map或JavaBean对象, 可用对象的.的形式访问);
      1. 输出hash中的属性;
        ${(<property-bean>.<property-name>)!"<default-value>"}
        
        • 前面的()中任意一级的值不存在就会显示后面的<default-value>
      2. 输出hash中的方法;
        ${<property-bean>.<method-name>()!"<default-value>"}
        
    • sequence(数组或者列表等可遍历/迭代的对象);
    • scalars(插值:存储的简单值, 整型, 字符串等),不能直接调用这些对象上的方法,但是可以使用FreeMarker内置的一些方法;
      1. 常用方式:
        • 直接输出scalars,${<property-name>},如果找不到property-name, 就会报错;
        • 处理不存在的scalars值:${<property-name>!"<default-value>"}
      2. 内建函数的使用, 在这种方式上, 虽然这个值是一个对象, 但是不应该调用这个对象的方法,只能通过FreeMarker中的内建(内置)函数来解决, 如String, Date
        • 从某个字符串的指定索引num开始截取, 截取到最后: ${str?substring(<num>)};
        • 从某个字符串的指定索引num开始截取, 截取长度为length: ${str?substring(<num>, <length>)};
        • 日期的显示: ${(<date-obj>?string("<date-format>"))!"<default-value>"}
  2. FTL指令。常见的FTL指令:
    • 判断,也可以使用单等号或者双等号意义一样
      <#if <condition>??>
          ...
      <#elseif>
          ...
      <#else> 
          ...
      </#if>
      ```html
      
    • 判断FreeMarker上下文总是否有某个变量
      <#if <property-name>??>
      </if>
      
    • 遍历
      <#list <sequence> as <item>>
          ${<item>}
      </#list>
      
    • 注释:
      <#-- <notes-content> -->
      
    • 导入
      1. <#include "<resource-path>" />
        • 主要用于导入静态的公共资源;
      2. <#import "<resource-path>" />
        • 主要用于涉及到内部函数以及变量声明导入;
      3. 除了FreeMarker中的模型和FTL指令,其他都是静态文本,原样输出;
      4. select回显, 编写JS代码:
        <script type="text/javascript">
            $("<select-selector> option[value=${<selected-value>}]").attr("selected" , "selected");
        </script>
        
    • 定义变量
      1. <#assign <variable-name> = "<variable-value>">
        • <variable-name>:变量名
        • <variable-value>:变量的值
        • 获取使用${<variable-name>}
      2. <#assign <variable-name> = <json-string>?eval>
        • 把JSON字符串转换成JSON对象
  3. FreeMarker常用的内置函数
    • Sequence的内置函数
      1. sequence?first :返回sequence的第一个值。
      2. sequence?last:返回sequence的最后一个值。
      3. sequence?reverse:将sequence的现有顺序反转,即倒序排序
      4. sequence?size:返回sequence的大小
      5. sequence?sort :将sequence中的对象转化为字符串后顺序排序
      6. sequence?sort_by(value):按sequence中对象的属性value进行排序
      • 注意:sequence不能为null
    • Hash的内置函数
      1. hash?keys
        • 返回hash里的所有key,返回结果为sequence
      2. hash?values
        • 返回hash里的所有value,返回结果为sequence
    • string内置函数
      1. substring(start,length)从一个字符串中截取子串
        • start:截取子串开始的索引,start必须大于等于0,小于等于end
        • length: 截取子串的长度,end必须大于等于0,小于等于字符串长度,如果省略该参数,默认为字符串长度。
      2. cap_first 将字符串中的第一个单词的首字母变为大写。
      3. uncap_first将字符串中的第一个单词的首字母变为小写。
      4. capitalize将字符串中的所有单词的首字母变为大写
      5. date,time,datetime将字符串转换为日期
        • 注意:如果指定的字符串格式不正确将引发错误
      6. ends_with 判断某个字符串是否由某个子串结尾,返回布尔值 注意:布尔值必须转换为字符串才能输出
      7. html 用于将字符串中的<、>、&和"替换为对应得<>&quot:&amp
      8. index_of(substring,start)在字符串中查找某个子串,返回找到子串的第一个字符的索引,如果没有找到子串,则返回-1。
        • start参数用于指定从字符串的那个索引处开始搜索,start为数字值。
        • 如果start大于字符串长度,则start取值等于字符串长度,如果start小于0,则start取值为0。
      9. length返回字符串的长度
      10. lower_case将字符串转为小写
      11. upper_case将字符串转为大写
      12. contains 判断字符中是否包含某个子串。返回布尔值 注意:布尔值必须转换为字符串才能输出 13.number将字符串转换为数字
      13. replace用于将字符串中的一部分从左到右替换为另外的字符串。
      14. split使用指定的分隔符将一个字符串拆分为一组字符串
      15. trim 删除字符串首尾空格
    • 数字内置函数
      • Freemarker中预订义了三种数字格式:number,currency(货币)和percent(百分比)其中number为默认的数字格式转换
        1. c:用于将数字转换为字符串
        2. string:用于将数字转换为字符串
    • 布尔值内置函数
      • string 用于将布尔值转换为字符串输出 true转为"true",false转换为"false"
      • foo?string("yes","no")如果布尔值是true,那么返回"yes",否则返回no
  4. 常见用法
    • 判断是否为空:
      1. <#if xx?exists>
      2. <#if xx??>
      3. <#if xx?default('xxx')> :不然当xxList没有数据的时候 ,很大很大一个黄页就等着你了
    • 数据类型转换:
      1. ${xx?string} //字符串
      2. ${xx?number}//整数
      3. ${xx?currency}//小数
      4. ${xx?percent} //百分比
    • 截取字符串长度:有的时候我们在页面中不需要显示那么长的字符串,比如新闻标题,这样用下面的列子就可以自定义显示的长度
      <#if news.title?length lt 13 >   
          ${news.title} 
      <#else>  
          ${news.title[0..12]} 
      </#if>
      
    • list操作: 拼接成字符串
      <#list seq as x>     
          ${x_index + 1}. ${x}
          <#if x_has_next>,</#if>
      </#list>
      
      • 在每个对象的后面添加_index,那么就代表当前的索引值;

二、Freemarker中相对比较全的配置

<bean id="freemarkerViewResolver" class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
    <property name="cache" value="false" />
    <property name="prefix" value="" />
    <property name="suffix" value=".html" />
    <property name="exposeSpringMacroHelpers" value="true" />
    <property name="exposeRequestAttributes" value="false" />
    <property name="exposeSessionAttributes" value="false" />
    <property name="contentType" value="text/html;charset=UTF-8" />
    <property name="requestContextAttribute" value="rc"></property>
</bean>
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
    <property name="templateLoaderPath" value="" />
    <property name="freemarkerVariables">
        <map>
            <entry key="myfreemarker" value-ref="myfreemarker" />
            <entry key="my_freemarker_" value-ref="my_freemarker" />
            <entry key="aa" value-ref="test2" />
        </map>
    </property>
    <property name="freemarkerSettings">
        <props>
            <prop key="tag_syntax">auto_detect</prop>
            <prop key="template_update_delay">5</prop>
            <prop key="defaultEncoding">UTF-8</prop>
            <prop key="url_escaping_charset">UTF-8</prop>
            <prop key="locale">zh_CN</prop>
            <prop key="boolean_format">true,false</prop>
            <prop key="datetime_format">yyyy-MM-dd HH:mm:ss</prop>
            <prop key="date_format">yyyy-MM-dd</prop>
            <prop key="time_format">HH:mm:ss</prop>
            <prop key="number_format">#</prop>
            <prop key="whitespace_stripping">true</prop>

            <prop key="auto_import">/WEB-INF/ftl/in.ftl as s</prop>   
            <prop key="classic_compatible">true</prop>
        </props>
    </property>
</bean>

三、编码示例

Configuration configure = new Configuration(Configuration.getVersion());
configure.setDirectoryForTemplateLoading(new File("templates"));
configure.setDefaultEncoding("UTF-8");
Template template = configure.getTemplate("test.ftl");
Writer writer = new FileWriter("<file-name>");
Dog dog = new Dog();
template.process(dog, writer);
writer.close();

相关文章

  • FreeMarker+BootStrap技术总结

    已经不知道多长时间没有碰到让我做页面的问题了, 于是乎,灾难来了,让我做运营后台的页面,想了一想还是复习复习吧,正...

  • JAVA技能树

    JAVA核心技术总结 J2EE技术总结 工作和学习总结 大数据相关技术总结

  • Android 技术文档目录

    技术周报[https://androidweekly.io] Android技术文档总结 技术文档总结[https...

  • 前端技术栈

    前端技术栈 自己总结的前端技术栈:

  • 技术总结

    JDK内存模型 NIO模型 异步Servet RxJava 并发,同步,线程池,ThreadLocal,Calla...

  • 技术总结

    设计模式:1.单例模式最简单的单例,应用场景(spring bean默认实现singleton模式,其他模式是cl...

  • 技术总结

    一 .前端技术 1.html&CSS 1.1行内元素和块元素的区别有哪些,如何相互转换? 行内元素:1.高度由内容...

  • 技术总结

    Code 小生 技术分享 | 年终总结 Code 小生 2017 | 我在 5 个月时间里分享了 98 篇文章 ...

  • 技术总结

    几年干了一年的java后台,熟悉使用spring boot框架,redis,elasticsearch,mysql...

  • 技术总结

    随便写点技术总结,不知道若干年后会不会有用 androidframwork service star...

网友评论

      本文标题:FreeMarker+BootStrap技术总结

      本文链接:https://www.haomeiwen.com/subject/lzedeftx.html