zoukankan      html  css  js  c++  java
  • beetl模板的${!}用法

    转自:http://ibeetl.com/guide/#beetl

    2.20. 安全输出

    安全输出是任何一个模板引擎必须重视的问题,否则,将极大困扰模板开发者。Beetl中,如果要输出的模板变量为null,则beetl将不做输出,这点不同于JSP,JSP输出null,也不同于Freemarker,如果没有用!,它会报错.

    模板中还有俩种情况会导致模板输出异常

    • 有时候模板变量并不存在(譬如子模板里)
    • 模板变量为null,但输出的是此变量的一个属性,如${user.wife.name}

    针对前俩种种情况,可以在变量引用后加上!以提醒beetl这是一个安全输出的变量。

    如${user.wife.name! },即使user不存在,或者user为null,或者user.wife为null,或者user.wife.name为null beetl都不将输出

    可以在!后增加一个常量(字符串,数字类型等),或者另外一个变量,方法,本地调用,作为默认输出,譬如:

    ${user.wife.name!”单身”},如果user为null,或者user.wife为null,或者user.wife.name为null,输出”单身”

    譬如

    ${user.birthday!@System.constants.DefaultBir}, 表示如果user为null,或者user. birthday为null,输出System.constants.DefaultBir

    还有一种情况很少发生,但也有可能,输出模板变量发生的任何异常,如变量内部抛出的一个异常

    这需要使用格式${!(变量)},这样,在变量引用发生任何异常情况下,都不作输出,譬如

    ${!(user.name)},,beetl将会调用user.getName()方法,如果发生异常,beetl将会忽略此异常,继续渲染

    值得注意的是,在变量后加上!不仅仅可以应用于占位符输出(但主要是应用于占位符输出),也可以用于表达式中,如:

    <%
    var k = user.name!'N/A'+user.age!;
    %>
    <%
    ${k}
    %>
    

    如果user为null,则k值将为N/A

    在有些模板里,可能整个模板都需要安全输出,也可能模板的部分需要安全输出,使用者不必为每一个表达式使用!,可以使用beetl的安全指示符号来完成安全输出 如:

    <%
    DIRECTIVE SAFE_OUTPUT_OPEN;
    %>
    ${user.wife.name}
    模板其他内容,均能安全输出……
    <%
    //关闭安全输出。
    DIRECTIVE SAFE_OUTPUT_CLOSE;
    %>
    

    Beetl不建议每一个页面都使用DIRECTIVE SAFE_OUTPUT_OPEN,这样,如果如果真有不期望的错误,不容易及时发现,其次,安全输出意味着beetl会有额外的代码检测值是否存在或者是否为null,性能会略差点。所以建议及时关闭安全输出(这不是必须的,但页面所有地方是安全输出,可能不容易发现错误)

    在for-in 循环中 ,也可以为集合变量增加安全输出指示符号,这样,如果集合变量为null,也可以不进入循环体,如:

    <%
    var list = null;
    for(item in list!){
    
    }elsefor{
            print("no data");
    }
    %>
  • 相关阅读:
    PAT甲级——A1006 Sign In and Sign Out
    PAT甲级——A1005 Spell It Right
    左神算法书籍《程序员代码面试指南》——1_05用一个栈实现另一个栈的排序
    左神算法书籍《程序员代码面试指南》——1_03如何使用递归函数和栈操作逆序一个栈
    PAT甲级——A1004 Counting Leaves
    PAT甲级——A1003Emergency
    Dijkstra算法
    PAT甲级——A1002 A+B for Polynomials
    PAT甲级——A1001A+BFormat
    Oil Deposits UVA
  • 原文地址:https://www.cnblogs.com/YuyuanNo1/p/9133858.html
Copyright © 2011-2022 走看看