精华内容
下载资源
问答
  • freemarker常见语法大全
    万次阅读 多人点赞
    2018-07-18 11:46:49

    FTL指令常用标签及语法

    注意:使用freemaker,要求所有标签必须闭合,否则会导致freemaker无法解析。

    freemaker注释:<#– 注释内容 –>格式部分,不会输出

    ———————————- 基础语法 ———————————-

    1、字符输出

    ${emp.name?if_exists}        // 变量存在,输出该变量,否则不输出
    ${emp.name!}              // 变量存在,输出该变量,否则不输出
    ${emp.name?default("xxx")}        // 变量不存在,取默认值xxx  
    ${emp.name!"xxx"}            // 变量不存在,取默认值xxx
    • 常用内部函数:
    ${"123<br>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")}

    2,日期输出

    $ {emp.date?string'yyyy -MM-dd')} //日期格式

    3,数字输出(以数字20为例)

    $ {emp.name?string.number} //输出20  
    $ {emp.name?string.currency} //¥20.00  
    $ {emp.name?string.percent} // 20%  
    $ {1.222int} //将小数转为int,输出1  
    
    <#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:小数部分最小X位
    MX:小数部分最大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 

    4,申明变量

    <#assign foo = false /> //声明变量,插入布尔值进行显示,注意不要用引号
    $ {foo?string(“yes”,“no”)} //当为真时输出“yes”,否则输出“no
    • 申明变量的几种方式
    <#assign name = value> 
    <#assign name1 = value1 name2 = value2 ... nameN = valueN> 
    <#assign same as above... in namespacehash> 
    
    <#assign name>
     capture this 
    </#assign> 
    
    <#assign name in namespacehash> 
    capture this 
    </#assign> 

    5,比较运算算符

    表达式中支持的比较运算符符如下几个:
    =或==:判断两个值是否相等。
    !=:判断两个值是否不等。
    >或gt:判断左边值是否大于右边值>
    <=或lte:判断左边值是否小于等于右边值

    6,算术运算符

    FreeMarker表达式中完全支持算术运算,
    FreeMarker支持的算术运算符包括:+, - ,*,/,%
    注意:
    (1)运算符两边必须是数字
    (2)使用+运算符时,如果一边是数字,一边是字符串,就会自动将数字转换为字符串再连接,
         如:$ {3 +“5”},结果是:35 

    7,逻辑运算符

    逻辑运算符有如下几个:
    逻辑与:&& 
    逻辑或:|| 
    逻辑非:!
    逻辑运算符只能作用于布尔值,否则将产生错误

    8,FreeMarker中的运算符优先级如下(由高到低排列):

    ①,一元运算符:!
    ②,内建函数:
    ③,乘除法:*/,%
    ④,加减法: -+ 
    ⑤,比较:><> =<=ltltegtgte)
    ⑥,相等:===, != 
    ⑦,逻辑与:&& 
    ⑧,逻辑或:|| 
    ⑨,数字范围:.. 实际上,我们在开发过程中应该使用括号来严格区分,这样的可读性好,出错少

    9,if逻辑判断(注意:elseif不加空格)

    <#if condition>
    ...
    <#elseif condition2>
    ...
    <#elseif condition3>
    ...
    <#else>
    ...
    </#if>
    if 空值判断
    
    // 当 photoList 不为空时
    <#if photoList??>...</#if> 
    
    值得注意的是,${..}只能用于文本部分,不能用于表达式,下面的代码是错误的:
    <#if ${isBig}>Wow!</#if>
    <#if "${isBig}">Wow!</#if>
    
    // 正确写法
    <#if isBig>Wow!</#if> 

    10、switch (条件可为数字,可为字符串)

    <#switch value> 
    <#case refValue1> 
    ....
    <#break> 
    <#case refValue2> 
    ....
    <#break> 
    <#case refValueN> 
    ....
    <#break> 
    <#default> 
    .... 
    </#switch>

    11、集合 & 循环

    // 遍历集合:
    <#list empList! as emp> 
        ${emp.name!}
    </#list>
    
    // 可以这样遍历集合:
    <#list 0..(empList!?size-1) as i>
        ${empList[i].name!}
    </#list>
    
    // 与jstl循环类似,也可以访问循环的状态。
    
    empList?size    // 取集合的长度
    emp_index:     // int类型,当前对象的索引值 
    emp_has_next:     // boolean类型,是否存在下一个对象
    
    // 使用<#break>跳出循环
    <#if emp_index = 0><#break></#if>
    
    // 集合长度判断 
    <#if empList?size != 0></#if> // 判断=的时候,注意只要一个=符号,而不是==
    
    <#assign l=0..100/>    // 定义一个int区间的0~100的集合,数字范围也支持反递增,如100..2
    <#list 0..100 as i>   // 等效于java for(int i=0; i <= 100; i++)
      ${i}
    </#list>
    
    // 截取子集合:
    empList[3..5] //返回empList集合的子集合,子集合中的元素是empList集合中的第4-6个元素
    
    // 创建集合:
    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as x>
    
    // 集合连接运算,将两个集合连接成一个新的集合
    <#list ["星期一","星期二","星期三"] + ["星期四","星期五","星期六","星期天"] as x>
    
    // 除此之外,集合元素也可以是表达式,例子如下:
    [2 + 2, [1, 2, 3, 4], "whatnot"]
    
    // seq_contains:判断序列中的元素是否存在
    <#assign x = ["red", 16, "blue", "cyan"]> 
    ${x?seq_contains("blue")?string("yes", "no")}    // yes
    ${x?seq_contains("yellow")?string("yes", "no")}  // no
    ${x?seq_contains(16)?string("yes", "no")}        // yes
    ${x?seq_contains("16")?string("yes", "no")}      // no
    
    // seq_index_of:第一次出现的索引
    <#assign x = ["red", 16, "blue", "cyan", "blue"]> 
    ${x?seq_index_of("blue")}  // 2
    
    // sort_by:排序(升序)
    <#list movies?sort_by("showtime") as movie></#list>
    
    // sort_by:排序(降序)
    <#list movies?sort_by("showtime")?reverse as movie></#list>
    
    // 具体介绍:
    // 不排序的情况:
    <#list movies as moive>
      <a href="${moive.url}">${moive.name}</a>
    </#list>
    
    //要是排序,则用
    <#list movies?sort as movie>
      <a href="${movie.url}">${movie.name}</a>
    </#list>
    
    // 这是按元素的首字母排序。若要按list中对象元素的某一属性排序的话,则用
    <#list moives?sort_by(["name"]) as movie>
      <a href="${movie.url}">${movie.name}</a>
    </#list>
    
    //这个是按list中对象元素的[name]属性排序的,是升序,如果需要降序的话,如下所示:
    <#list movies?sort_by(["name"])?reverse as movie>
      <a href="${movie.url}">${movie.name}</a>
    </#list>

    12、Map对象

    // 创建map
    <#assign scores = {"语文":86,"数学":78}>
    
    // Map连接运算符
    <#assign scores = {"语文":86,"数学":78} + {"数学":87,"Java":93}>
    
    // Map元素输出
    emp.name       // 全部使用点语法
    emp["name"]    // 使用方括号
    循环//遍历集合:<#list empList!as emp>     $ {emp.name!}

    13、FreeMarker支持如下转义字符:

    \" :双引号(u0022)
    \' :单引号(u0027)
    \\ :反斜杠(u005C)
    \n :换行(u000A)
    \r :回车(u000D)
    \t :Tab(u0009)
    \b :退格键(u0008)
    \f :Form feed(u000C)
    \l :<
    \g :>
    \a&
    \{{
    \xCode :直接通过4位的16进制数来指定Unicode码,输出该unicode码对应的字符.
    
    如果某段文本中包含大量的特殊符号,FreeMarker提供了另一种特殊格式:可以在指定字符串内容的引号前增加r标记,在r标记后的文件将会直接输出.看如下代码:
    ${r"${foo}"} // 输出 ${foo}
    ${r"C:/foo/bar"} // 输出 C:/foo/bar

    14、include指令

    // include指令的作用类似于JSP的包含指令:
    <#include "/test.ftl" encoding="UTF-8" parse=true>
    
    // 在上面的语法格式中,两个参数的解释如下:
    encoding="GBK"  // 编码格式
    parse=true    // 是否作为ftl语法解析,默认是true,false就是以文本方式引入
    注意:在ftl文件里布尔值都是直接赋值的如parse=true,而不是parse="true"

    15、import指令

    // 类似于jsp里的import,它导入文件,然后就可以在当前文件里使用被导入文件里的宏组件
    <#import "/libs/mylib.ftl" as my>
    // 上面的代码将导入/lib/common.ftl模板文件中的所有变量,交将这些变量放置在一个名为com的Map对象中,"my"在freemarker里被称作namespace

    16、compress 压缩

    // 用来压缩空白空间和空白的行 
    <#compress> 
        ... 
    </#compress>
    <#t> // 去掉左右空白和回车换行 
    
    <#lt>// 去掉左边空白和回车换行 
    
    <#rt>// 去掉右边空白和回车换行 
    
    <#nt>// 取消上面的效果

    17、escape,noescape 对字符串进行HTML编码

    // escape指令导致body区的插值都会被自动加上escape表达式,但不会影响字符串内的插值,
        只会影响到body内出现的插值,使用escape指令的语法格式如下:
    <#escape x as x?html> 
      First name: ${firstName} 
    <#noescape>Last name: ${lastName}</#noescape> 
      Maiden name: ${maidenName} 
    </#escape>
    
    // 相同表达式
    First name: ${firstName?html} 
    Last name: ${lastName} 
    Maiden name: ${maidenName?html}

    ———————————- 高级语法 ———————————-

    1、global全局赋值语法

    <#global name=value> 
    
    <#global name1=value1 name2=value2 ... nameN=valueN> 
    
    <#global name> 
      capture this 
    </#global>
    
    // 利用这个语法给变量赋值,那么这个变量在所有的namespace中是可见的,
        如果这个变量被当前的assign语法覆盖如<#global x=2><#assign x=1>
        在当前页面里x=2将被隐藏,或者通过${.globals.x} 来访问

    2、setting 语法

    // 用来设置整个系统的一个环境 
    locale // zh_CN 中文环境
    number_format 
    boolean_format 
    date_format , time_format , datetime_format 
    time_zone 
    classic_compatible
    // 例1:
    <#setting number_format="percent"/>    // 设置数字默认输出方式('percent',百分比)
    
    // 例2:
    // 假如当前是匈牙利的设置,然后修改成美国
    ${1.2} // 输出1,2
    <#setting locale="en_US"> 
    ${1.2} // 输出1.2,因为匈牙利是采用", "作为十进制的分隔符,美国是用". "

    3、macro宏指令

    • 例子1:
    <#-- 定义宏 -->
    <#macro test foo bar="Bar" baaz=-1> 
      Text: ${foo}, ${bar}, ${baaz}
    </#macro>
    
    <#-- 使用宏 -->
    <@test foo="a" bar="b" baaz=5*5/>  // 输出:Text: a, b, 25
    <@test foo="a" bar="b"/>        // 输出:Text: a, b, -1
    <@test foo="a" baaz=5*5-2/>     // 输出:Text: a, Bar, 23
    <@test foo="a"/>                   // 输出:Text: a, Bar, -1
    • 例子2:
    <#-- 定义一个循环输出的宏 -->
    <#macro list title items> 
      ${title}
      <#list items as x>
        *${x}
      </#list> 
    </#macro> 
    
    <#-- 使用宏 -->
    <@list items=["mouse", "elephant", "python"] title="Animals"/>
    // 输出Animals *mouse *elephant *python
    • 例子3:
    <#-- 嵌套宏 -->
    <#macro border>
      <table>
        <#nested>
      </table>
    </#macro>
    
    <#-- 嵌套宏使用 -->
    <@border>
      <tr><td>hahaha</td></tr>
    </@border> 
    输出结果:
    <table>
      <tr><td>hahaha</td></tr>
    </table>
    • 例子4:在nested指令中使用循环变量时,可以使用多个循环变量,看如下代码:
    <#-- 循环嵌套宏 -->
    <#macro repeat count>
      <#list 1..count as x>
        <#nested x, x/2, x==count> // 使用nested指令时指定了三个循环变量
      </#list>
    </#macro>
    
    <#-- 使用宏 -->
    <@repeat count = 4; c, halfc, last>
      ${c}. ${halfc}<#if last> Last!</#if>
    </@repeat>
    // 输出结果:
    // 1. 0.5
    // 2. 1
    // 3. 1.5
    // 4. 2 Last!
    freemarker 宏嵌套nested 的使用:
    http://blog.sina.com.cn/s/blog_7e5699790100z59g.html  

    4、结束macro指令

    // return指令用于结束macro指令
    <#-- 创建宏 -->
    <#macro book>
      spring
      <#return>
      j2ee
    </#macro>
    
    <#-- 使用宏 -->
    <@book />
    // 上面的代码输出:spring,而j2ee位于return指令之后,不会输出.
    FreeMarker 工具类:
    
    http://files.cnblogs.com/files/duke-cui/FreeMarkerUtil.rar
    
    
    
    THE END !!!!
    更多相关内容
  • 本文实例讲述了Python自定义函数的5种常见形式。分享给大家供大家参考,具体如下: Python自定义函数是以def开头,空一格之后是这个自定义函数的名称,名称后面是一对括号,括号里放置形参列表,结束括号后面一定要...
  • sql常见语法SQL Server Management Studio, errors can be tracked down easily, using the built in 错误列表”窗格,可以轻松跟踪Error List pane. This pane can be activated in the SQL Server Management ...

    sql常见语法

    SQL Server Management Studio, errors can be tracked down easily, using the built in 错误列表”窗格,可以轻松跟踪 Error List pane. This pane can be activated in the SQL Server Management Studio错误。 可以在“ View menu, or by using shortcuts 视图”菜单中或使用快捷键 Ctrl+\ and Ctrl + \Ctrl+E Ctrl + E激活此窗格。

    The Error List pane displays syntax and semantic errors found in the query editor. To navigate directly to the SQL syntax error in the script editor, double-click the corresponding error displayed in the Error List

    “错误列表”窗格显示在查询编辑器中发现的语法和语义错误。 要在脚本编辑器中直接导航到SQL语法错误,请双击“错误列表”中显示的相应错误。

    SQL关键字错误 (SQL Keyword errors)

    SQL keyword errors occur when one of the words that the SQL query language reserves for its commands and clauses is misspelled. For example, writing “UPDTE” instead of “UPDATE” will produce this type of error

    当SQL查询语言为其命令和子句保留的单词之一拼写错误时,就会发生SQL关键字错误。 例如,写“ UPDTE”而不是“ UPDATE”将产生这种类型的错误。

    In this example, the keyword “TABLE” is misspelled:

    在此示例中,关键字“ TABLE”的拼写错误:

    As shown in the image above, not only the word “TBLE” is highlighted, but also the words around it. The image below shows that this simple mistake causes many highlighted words

    如上图所示,不仅单词“ TBLE”突出显示,而且周围的单词也突出显示。 下图显示此简单错误导致许多突出显示的单词

    In fact, there are total of 49 errors reported just because one keyword is misspelled

    实际上,仅由于一个关键字拼写错误,总共报告了49个错误

    If the user wants to resolve all these reported errors, without finding the original one, what started as a simple typo, becomes a much bigger problem

    如果用户想解决所有这些报告的错误,而又找不到原始错误,那么从一个简单的错字开始就变成了一个更大的问题。

    It’s also possible that all SQL keywords are spelled correctly, but their arrangement is not in the correct order. For example, the statement “FROM Table_1 SELECT *” will report an SQL syntax error

    所有SQL关键字的拼写也可能正确,但是它们的排列顺序不正确。 例如,语句“ FROM Table_1 SELECT *”将报告SQL语法错误

    命令安排 (Arrangement of commands)

    The wrong arrangement of keywords will certainly cause an error, but wrongly arranged commands may also be an issue

    关键字排列错误肯定会导致错误,但是命令排列错误也可能是一个问题

    If the user, for example, is trying to create a new schema into an existing database, but first wants to check if there is already a schema with the same name, he would write the following command

    例如,如果用户试图在现有数据库中创建新模式,但是首先要检查是否已经存在一个具有相同名称的模式,则他将编写以下命令

    However, even though each command is properly written, and is able to run separately without errors, in this form it results in an error

    但是,即使正确地编写了每个命令,并且能够独立运行且没有错误,以这种形式也会导致错误

    Incorrect syntax error

    As the error message states, CREATE SCHEMA command has to be the first command that is given. The correct way of running this commands together looks like this

    如错误消息所述,CREATE SCHEMA命令必须是给出的第一个命令。 一起运行此命令的正确方法如下所示

    使用引号 (Using quotation marks)

    Another common error that occurs when writing SQL project is to use double quotation marks instead of single ones. Single quotation marks are used to delimit strings. For example, double quotation marks are used here instead of single ones, which cause an error

    编写SQL项目时发生的另一个常见错误是使用双引号而不是单引号。 单引号用于分隔字符串。 例如,此处使用双引号而不是单引号,这会导致错误

    Invalid column name error

    Replacing quotation marks with the proper ones, resolves the error

    用正确的引号替换引号可以解决错误

    There are situations where double quotation marks need to be used, for writing some general quotes, for example

    在某些情况下,需要使用双引号来编写一些通用引号,例如

    As shown in the previous example, this will cause an error. But, this doesn’t mean that double quotes can’t be used, they just have to be inside the single quotes. However, adding single quotes in this example won’t solve the problem, but it will cause another one

    如上例所示,这将导致错误。 但是,这并不意味着不能使用双引号,而只需要在单引号内即可。 但是,在此示例中添加单引号不会解决问题,但会导致另一个问题

    Since there is an apostrophe inside this quote, it is mistakenly used as the end of a string. Everything beyond is considered to be an error

    由于此引号内有撇号,因此将其错误地用作字符串的结尾。 超出范围的所有内容均视为错误

    To be able to use an apostrophe inside a string, it has to be “escaped”, so that it is not considered as a string delimiter. To “escape” an apostrophe, another apostrophe has to be used next to it, as it is shown below

    为了能够在字符串中使用撇号,必须对其进行“转义”,以便不将其视为字符串定界符。 要“转义”一个撇号,必须在其旁边使用另一个撇号,如下所示

    查找SQL语法错误 (Finding SQL syntax errors)

    Finding SQL syntax errors can be complicated, but there are some tips on how to make it a bit easier. Using the aforementioned Error List helps in a great way. It allows the user to check for errors while still writing the project, and avoid later searching through thousands lines of code

    查找SQL语法错误可能很复杂,但是有一些技巧使它变得更简单。 使用上述错误列表有很大帮助。 它允许用户在仍然编写项目的同时检查错误,并避免以后搜索数千行代码

    Another way to help, is to properly format the code

    另一种帮助方法是正确格式化代码

    This can improve code readability, thus making the search for errors easier

    这样可以提高代码的可读性,从而使错误查找更加容易

    翻译自: https://www.sqlshack.com/sql-syntax-errors/

    sql常见语法

    展开全文
  • freemarker常见语法大全,灰常有用!

    万次阅读 2016-04-22 10:55:54
    format}形式来格式化数字,其中format可以是:  mX:小数部分最小X位  MX:小数部分最大X位 在定义字符串的时候,可以使用''或者"",对特殊字符,需要使用\进行转义 如果存在大量特殊字符,可以使用${r"......

    由于公司前端使用的技术是freemarker,于是没事就在网上看看别人写的关于freemarker的文章,感觉freemarker灰常简单,比jsp好用,jsp太乱太臃肿了,另外推荐大家看看freemarker手册写的很好。

    为了处理缺失变量,FreeMarker提供了两个运算符: 用于防止对象不存在而导致的异常 
    !:指定缺失变量的默认值 
    ??:判断某个变量是否存在,返回boolean值

    ${item.createtime.toString("YYYY年MM月dd日 HH:mm:ss")},指定中文时间格式

    ${item.money!?string("0.00")}&nbsp;元 ,指定money格式

    Map对象的key和value都是表达式,但是key必须是字符串 
    可以混合使用.和[""]访问 
    book.author["name"] //混合使用点语法和方括号语法

    FreeMarker的插值有如下两种类型:1,通用插值${expr};2,数字格式化插值:#{expr}或#{expr;format} 
    ${book.name?if_exists } //用于判断如果存在,就输出这个值 
    ${book.name?default(‘xxx’)}//默认值xxx 
    ${book.name!"xxx"}//默认值xxx 
    ${book.date?string('yyyy-MM-dd')} //日期格式 
    ${book?string.number} 20 //三种不同的数字格式 
    ${book?string.currency}--<#-- $20.00 --> 
    ${book?string.percent}—<#-- 20% -->

    <#assign foo=ture /> //声明变量,插入布尔值进行显示 
    ${foo?string("yes","no")} <#-- yes -->

    大小比较符号使用需要注意:(xml的原因),可以用于比较数字和日期 
    使用lt、lte、gt和gte来替代<、<=、>和>= 也可以使用括号<#if (x>y)>

    内置函数: 调用区别于属性的访问,使用?代替. 
    常见的一些内置函数 
    对于字符串 
    html-对字符串进行HTML编码 
    cap_first-使字符串第一个字母大写 
    lower_case-将字符串转换成小写 
    trim-去掉字符串前后的空白字符

    示例:${“freeMarker”?cap_first

     

    对于Sequences(序列) 
    size-获得序列中元素的数目

    对于数字 
    int-取得数字的整数部分(如-1.9?int的结果是-1)

    对于集合,可以使用数组的方式,使用下标索引进行访问

    逻辑判断: 
    if................

    <#if condition>... 
    <#elseif condition2>... 
    <#elseif condition3>...... 
    <#else>... 
    Boolean类型的空值判断 
    空值判断可以写成<#if book.name?? > //注意${}为变量的渲染显示,而<>为定义等操作符的定义

    switch............ 
    <#switch value> 
    <#case refValue1> 
    ... 
    <#break> 
    <#case refValue2> 
    ... 
    <#break> 
    ... 
    <#case refValueN> 
    ... 
    <#break> 
    <#default> 
    ... 
    </#switch>

    快速定义int区间的集合 
    <#assign l=0..100/> //注意不需要[]

    3:循环读取集合: 注意/的使用 
    <#list student as stu> 
    ${stu}<br/> 
    </#list> 

    与jstl循环类似,也可以访问循环的状态 
    item_index:当前变量的索引值 
    item_has_next:是否存在下一个对象 其中item名称为as后的变量名,如stu

    集合长度判断 
    <#if student?size != 0></#if> 判断=的时候,注意只要一个=符号,而不是==

    宏/模板 
    初步了解: 使用更像一个闭包closure,可以定义后,在脚本中任意地方引用,并原地起作用 
    <#macro greet> 
    <font size="+2">Hello Joe!</font> 
    </#macro> 
    使用的方式为: 
    <@greet></@greet> //同xml可以简写成<@greet/>

    宏的参数定义,类似js,在宏名后 带参数进行传递定义 
    <#macro greet person color> 
    ${person} 
    </#macro>

    调用带参数时,注意使用类似XML的属性格式进行传递,不需要关心顺序问题 
    <@greet person="Fred" color="black"/>

    参数默认值定义,如果没有,就必须要求传递完整的参数列表 
    <#macro greet person color="black"> 
    <font size="+2" color="${color}">Hello ${person}!</font> 
    </#macro>

    使用xml的嵌套内容进行传递宏调用,关键标签 <#nested> 
    <#macro border> 
    <table border=4 cellspacing=0 cellpadding=4><tr><td> 
    <#nested> 
    </tr></td></table> 
    </#macro>

    调用时: 
    <@border>The bordered text</@border>

    <#nested> 标签可以在宏中多次调用,也可以将多个宏组合进行嵌套

    for循环的精简版: 
    <#list 1..count as x> 
    </#list>

    宏的循环变量,配合嵌套标签进行参数传递, 
    <#macro repeat count> 
    <#list 1..count as x> 
    <#nested x, x/2, x==count> //这里的三个参数,将会传递到嵌套内容中 
    </#list> 
    </#macro>

    <@repeat count=4 ; c, halfc, last> 
    ${c}. ${halfc}<#if last> Last!</#if> //这里的内容由macro中的<#nested>进行参数的传递,传递的数量任意,当注意需要宏接受这些 
    </@repeat> 
    上述还需要注意;的使用

    参数的数量是可变的,并不要求全部都有,但是效果不同

    在模板中定义变量 
    在模板中定义的变量有三种类型: 
    plain变量:可以在模板的任何地方访问,包括使用include指令插入的模板,使用assign指令创建和替换。 
    局部变量:在宏定义体中有效,使用local指令创建和替换。 
    循环变量:只能存在于指令的嵌套内容,由指令(如list)自动创建;宏的参数是局部变量,而不是循环变量

    <#assign x = "plain"> //全局的plain变量 
    内部循环变量将会隐藏同名的外部循环变量

    外部导入的使用,可以用于模块化,并且提供公用性 
    如:lib/my_lib.ftl文件 
    <#macro copyright date> 
    <p>Copyright (C) ${date} Julia Smith. All rights reserved. 
    <br>Email: ${mail}</p> 
    </#macro> 
    <#assign mail = "jsmith@acme.com">

    lib/my_inc.ftl文件 
    <#import "/lib/my_test.ftl" as my> 
    <#assign mail="fred@acme.com"> 
    <@my.copyright date="1999-2002"/> 
    ${my.mail} 
    ${mail} 
    输出结果将不会出现冲突

    对于库中的变量修改,使用in关键字 
    <#assign mail="jsmith@other.com" in my>

    函数定义:区别于宏对象,带返回值 
    <#function name param1 param2><#return val></#function>函数,有返回参数

    stringA[M .. N] 取子字符串,类似substring(stringA, M, N)

    <#include "/copyright_footer.html"> 导入其他页面元素 
    <#include filename options> 
    options包含两个属性 
    encoding=”GBK” 编码格式 
    parse=true 是否作为ftl语法解析,默认是true,false就是以文本方式引入.注意在ftl文件里布尔值都是直接赋值的如parse=true,而不是

    parse=”true”

    hash与list的定义 
    <#assign c= {"a":"orz","b":"czs"}> 
    ${c.a}

    List片段可以采用: products[10..19] or products[5..] 的格式进行定义,当只局限于数字 
    <#assign c= [1,2,3,4,5,6,6,7]> 
    <#list c[1..3] as v> 
    ${v} 
    </#list>

    对变量的缺省处理 
    product.color!"red"

    用compress directive或者transform来处理输出。 
    <#compress>...</#compress>:消除空白行。 
    <@compress single_line=true>...</@compress>将输出压缩为一行。都需要包裹所需文档

    freemarker可用"["代替"<".在模板的文件开头加上[#ftl].

    注释部分 
    <#-- 注释部分 -->

    数字输出的另外一种方式 
    #{c.a;m0} 区别于${},这个例子是用于输出数字的格式化,保留小数的位数,详细如下

    数字格式化插值可采用#{expr;format}形式来格式化数字,其中format可以是: 
    mX:小数部分最小X位 
    MX:小数部分最大X位

    在定义字符串的时候,可以使用''或者"",对特殊字符,需要使用\进行转义

    如果存在大量特殊字符,可以使用${r"..."}进行过滤 
    ${r"${foo}"} 
    ${r"C:\foo\bar"}

    noparse指令指定FreeMarker不处理该指定里包含的内容,该指令的语法格式如下: 
    <#noparse>...</#noparse>

    ${firstName?html} 使用html对字符进行格式化处理,对于<等的过滤

    escape , noescape指令,对body内的内容实用统一的表达式 
    看如下的代码: 
    <#escape x as x?html> 
    First name:${firstName} 
    Last name:${lastName} 
    Maiden name:${maidenName} 
    </#escape> 
    上面的代码等同于: 
    First name:${firstName?html} 
    Last name:${lastName?html} 
    Maiden name:${maidenName?html}

    定义全局变量的方式 
    <#assign name1=value1 name2=value2 / > // 可以同时定义多个变量,也可以使用循环来给变量赋值 
    <#assign x> 
    <#list ["星期一", "星期二", "星期三", "星期四", "星期五", "星期六", "星期天"] as n> 
    ${n} 
    </#list> 
    </#assign> 
    ${x}

    setting指令,用于动态设置freeMarker的运行环境:

    该指令用于设置FreeMarker的运行环境,该指令的语法格式如下:<#setting name=value>,在这个格式中,name的取值范围包含如下几个: 
    locale:该选项指定该模板所用的国家/语言选项 
    number_format:指定格式化输出数字的格式 
    boolean_format:指定两个布尔值的语法格式,默认值是true,false 
    date_format,time_format,datetime_format:指定格式化输出日期的格式 
    time_zone:设置格式化输出日期时所使用的时区

    <#return> 用于退出宏的运行

    ?html 用于将字符串中可能包含的html字符,进行过滤.

    调用Java方法,需要使用实现TemplateMethodModel接口,但是好像会覆盖掉属性的访问


    展开全文
  • 汇编语言常见语法错误分析 压缩的 分四个文件 是pdf格式的 俺是外行 看你有用么 中文的
  • 存储过程常见语法

    万次阅读 2018-12-23 16:39:37
    存储过程常见语法 一、存储过程的概念: 1、存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行 2、存储过程中可以包含逻辑控制语句和...

    存储过程常见语法

    一、存储过程的概念:

    1、存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行

    2、存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值

    3、由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。


    存储过程基本知识:

    一、oracle存储过程结构:

    CREATE OR REPLACE PROCEDURE 存储过程名
    (
    输入输出参数
    )
    IS
    变量定义位置
    BEGIN
    代码;
    
    END 存储过程名;

    二、基本变量类型:

    1、CHAR类型: '定长字符串'(会用空格填充来达到其最大长度), 若不指定CHAR的长度,默认为1,最大2000字节

    2、NCHAR类型: 包含UNICODE格式数据的'定长字符串',若定义为NCHAR类型,模糊查询时如下书写:

            select * from INSERTTEST t where t.qq like '%daa21%'  查询的值必须是'%内容%'

           NICODE格式数据:统一码、万国码、单一码)是计算机科学领域里的一项业界标准,

           包括字符集、编码方案等(统一并且唯一的二进制编码)

    3、VARCHAR类型:   --->  最好不使用

    4、VARCHAR2类型: '变长字符串' 最大4000字节

    5、NVARCHAR2类型:同Nchar类似,包含UNICODE格式数据的'变长字符串'

    6、NUMBER类型: NUMBER(P,S)是最常见的数字类型

    7、INTEGER类型:NUMBER的子类型,它等同于NUMBER(38,0),用来存储整数,

        若插入、更新的数值有小数,则会被四舍五入

    8、浮点数

      (1)BINARY_FLOAT :32 位单精度浮点数字数据类型

      (2)BINARY_DOUBLE :64 位双精度浮点数字数据类型

    9、FLOAT类型 :也是NUMBER的子类型,

         Float(n),数 n 指示位的精度,可以存储的值的数目。N 值的范围可以从 1 到 126

    10、DATE类型  :一般占用7个字节的存储空间

    11、TIMESTAMP类型  :这是一个7字节或12字节的定宽日期/时间数据类型。它与DATE数据类型不同,

          因为TIMESTAMP可以包含小数秒,带小数秒的TIMESTAMP在小数点右边最多可以保留9位   

    12、LONG类型 :存储变长字符串,最多达2G的字符数据

    三、存储过程 if语句:

    if 逻辑表达式 then
          内容
    Elsif  逻辑表达式 then
          内容
    Else
          内容
    End if;

    四、oracle 存储过程中的 := 和=有什么区别

    := 是赋值符号,例如: a := 2, 那么变量a的值,就是2了

    = 是比较符号, 例如: ... WHERE 字段名 = 2,和 > < 是一样的性质

    五、游标与循环

    CREATE OR REPLACE PROCEDURE yzy_test()
    
       is
       type myCur is ref cursor;
       cur myCur;
       returnValue  VARCHAR2(3000);
       SelectSQL  VARCHAR2(3000);
    begin
    
       SelectSQL:= 'select test from yzy_test';
       open cur for SelectSQL;
       loop
       exit when cur%notfound ; --当游标属于notfound,直接弹出
       fetch cur into returnValue;
       end loop;
       close cur;
         EXCEPTION WHEN OTHERS THEN
         --存储过程出错走这里
    end yzy_test;

    这里注意的是exit when cur%notfound 这句话,有的时候游标的notfound 值有可能是大写也有可能是小写,这个地方是区分大小写的,如果不加这句话,造成的后果就是一直循环,不会弹出。

    六、使用临时表返回数据 SYS_REFCURSOR 作为临时表

    CREATE OR REPLACE PROCEDURE SP_TEST(C_RES OUT  SYS_REFCURSOR) AS
    V_SQL VARCHAR2(1000);
    BEGIN
    
      V_SQL:='BEGIN OPEN :C_RES FOR SELECT * FROM DUAL; END;';
    
      EXECUTE IMMEDIATE V_SQL  USING C_RES;
    
    END SP_TEST;  

    说明: EXECUTE IMMEDIATE执行的是SQL, 

            或者PL/SQL块,所以加上BEGIN ... END,

             还要把C_RES当作绑定变量传递。

    七、打印执行sql

    create or replace procedure test is
    v_sql varchar2(2000);--要定义一个存放sql语句的变量
    begin
      v_sql:='insert into test1 values (sysdate)';--给sql赋值
      dbms_output.put_line(v_sql);--打印
      execute immediate v_sql;--执行sql
      commit;
    end test;

    sql查询: select * from test1;

    结果:

    八、自治事务--自定义事务(独立)

    在存储过程begin上方添加PRAGMA AUTONOMOUS_TRANSACTION;就成为自治事务

    自治事务从当前事务开始,在其自身的语境中执行。它们能独立地被提交或重新运行,而不影响正在运行的事务。正因为这样,它们成了编写错误日志表格的理想形式。在事务中检测到错误时,您可以在错误日志表格中插入一行并提交它,然后在不丢失这次插入的情况下回滚主事务。(rollback;--回滚)

    create or replace procedure insertLog(LogValue in varchar2)is
    v_sql varchar2(2000);--要定义一个存放sql语句的变量
    PRAGMA AUTONOMOUS_TRANSACTION;
    begin
      v_sql:='insert into test1(id,date1,logvalue) values (sys_guid(),sysdate,'''||LogValue||''')';
      --给sql赋值
      dbms_output.put_line(v_sql);--打印
      execute immediate v_sql;--执行sql
      commit;
     
    end insertLog;

    九、如何检测存储过程中的错误

    begin
     EXCEPTION    WHEN OTHERS THEN
       存储过程出差后走这里
     rollback;
    
    
    end 存储过程名;

    十、面对大量数据进行联合查询并修改情景时使用  merge into ...using() on...

    create or replace procedure merge_test is
    begin
      MERGE INTO user_test a USING ( select id from order_test) b ON (a.id=b.id)
       WHEN MATCHED THEN
            UPDATE SET a.sex =3
        WHEN NOT MATCHED THEN  
          insert (id,USERNUME,sex) values(sys_guid(),'匹配不上',5);
       commit;
    end merge_test;

    -------------------------

    含义:匹配 user_test a,用( select id from order_test) b这个查询结果,用on建立联系,当匹配上用update,

                                           匹配不上用insert。

    注意:ON里面的条件,不能作为 update里 set 的条件

    结果:

    十一、exit与rollback

    exit     --结束 可以使用场景:跳出循环

    rollback  --回滚 出差的时候进行回滚,保证运行事务后数据不缺失

    十二、查询数据赋值给某个变量

     select to_date(vgfrq1,'yyyy/mm/dd') into vgfrq from dual;

    十三、INSERT ALL 多表插入数据(带条件和游标循环)

    准备:

    select * from user_test;

    使用:

    create or replace procedure SP_more_insert is
     S_id varchar(500);
     type myCur is ref cursor;
     cur myCur;
    begin
       open cur for  SELECT a.id from user_test a  where a.address = 'YZY';
       LOOP
       FETCH cur   INTO S_id;
       EXIT WHEN cur%NOTFOUND;
       --带条件多表插入
      insert ALL 
           WHEN S_id='0' THEN
             INTO one_test(id,va,ass) 
           WHEN S_id='1' THEN
             INTO  two_test(id,va,ass)
           WHEN S_id='10' THEN
             INTO  three_test(id,va,ass)
      SELECT sys_guid(),a.usernume,a.address from user_test a  where a.address = 'YZY' and  a.id = S_id; 
       commit;
      END LOOP;
      close cur;
     EXCEPTION    WHEN OTHERS THEN
       insertLog('SP_more_insert出差!!!');
     rollback;
    end SP_more_insert;

    效果: 

    展开全文
  • Vue.js 模板语法

    2020-12-13 20:52:10
    Vue.js 模板语法 ...数据绑定最常见形式就是使用 {{…}}(双大括号)的文本插值: 文本插值 {{ message }} Html 使用 v-html 指令用于输出 html 代码: v-html 指令 new Vue({ el: '#app'
  • C语言常见语法——运算符和表达式

    千次阅读 2019-05-30 14:28:29
     一般形式为:  表达式1? 表达式2: 表达式3   其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式2的值作为整个条件表达式的值。 6.作为初学者,写自增,自减运算符时...
  • 编译原理作业,递归下降语法分析器。根据课堂讲授的形式化算法,编制程序实现递归下降分析器,能对常见的语句进行分析。
  • 深入浅出Python——Python基础语法全解

    万次阅读 多人点赞 2020-07-24 20:31:37
    前言:Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 文章目录一、Python简介1.... 注释的分类及语法五、变量1. 变量的作用2. 定义变量2.1 标识符2.2 命名习惯2.3 使用变量2.4 认识
  • freemarker(FTL)常见语法

    万次阅读 2018-07-12 10:01:05
    常见的一些内置函数  对于字符串  html-对字符串进行HTML编码  cap_first-使字符串第一个字母大写  lower_case-将字符串转换成小写  trim-去掉字符串前后的空白字符  对于Sequences(序列)  size-获得...
  • freemarker(FTL)常见语法大全

    千次阅读 2018-01-10 14:18:39
    format}形式来格式化数字,其中format可以是: mX:小数部分最小X位 MX:小数部分最大X位 在定义字符串的时候,可以使用”或者”“,对特殊字符,需要使用\进行转义 如果存在大量特殊字符,可以使用${r”…”}...
  • VBA的常见语法整理

    万次阅读 2017-02-18 12:14:30
    6、删除指定行(1:1为行号,必须为字符串形式) Rows("1:1").Select Selection.Delete shift:=xlUp 7、遍历全部工作表 Dim ws For Each ws In Worksheets Dim i For i = 1 To 10 ws....
  • 英语48个常见语法点(未完待续)

    千次阅读 2013-09-23 18:44:49
    话说,英语不好的程序永远都是三流的程序员。不知道这句话是否真的正确。但是最近突然觉得每天和api打交道很... 网上找了基本英语语法的电子书。都是中文的,薄冰实用英语语法,看了一下,看不懂。开篇就是什么词法、
  • 在本教程中,您将看到Python中常见的无效语法示例,并学习如何解决这个问题。 在本教程结束时,您将能够: 识别Python中的无效语法 理解SyntaxError回溯 解析无效语法或完全阻止它 image Python中的无效语法 ...
  • MATLAB常见语法错误分析及解决办法

    万次阅读 2018-08-08 16:07:57
    1.Subscript indices must either be real positive integers or logicals 中文解释:下标索引必须是正整数类型或者逻辑...注:matlab 的语法规定矩阵的索引从 1 开始,这与 C 等编程语言的习惯不一样。 解决办法...
  • Java基本语法大全(全)

    千次阅读 2021-03-14 11:36:14
    Java基本语法总结,一、Java语言的基本元素二、数据类型三、运算符与表达式四、数组五、三种控制结构语句,例1编写一个简单的JavaApplication源程序:HelloWorldApp.java。程序的运行结果是输出一句话“HelloWorld!”...
  • Matlab常见语法错误及解决方法

    万次阅读 2019-09-16 20:43:56
    文章目录Matlab常见语法错误及解决方法1.Subscript indices must either be real positive integers or logicals2.Undefined function or variable "U"3.Matrix dimensions must agree4.Function definitions are ...
  • PHP中的替代语法简介

    2021-01-20 00:28:58
    替代语法是PHP程序设计中不常见到,有时却又很重要的一个概念。今天本文就以实例形式展示了这一概念的用法。 查看一下wordpress的代码,里面可以见到有些少见的php替代语法,如下所示: <?php else : ?> &...
  • 类是C++程序设计非常重要的概念,本文即以实例形式说明了类的常见用法。具体如下: 本测试代码主要包括以下内容: (1)如何使用构造函数; (2)默认构造函数; (3)对象间赋值; (4)const使用语法; (5)定义类常量: 一...
  • Vue知识(一)Vue基础语法

    千次阅读 多人点赞 2021-05-03 16:16:46
    Vue.js有多种数据绑定的语法,最基础的形式是文本插值,使用一对大括号语法,在运行时{{ message }}会被数据对象的message属性替换,所以页面上会输出"Hello World!"。 模板template 二、Vue基础语法 mustache语法...
  • LINQ语法进阶

    千次阅读 2021-10-24 22:57:48
    上篇文章我们说过,LINQ语法中,包含了查询表达式语法和标准查询方法语法,下面我们举例来说明, 如何分别用上述两种不同方式编写常用查询语句。 下表列出包含等效查询表达式子句的标准查询运算符。 方法 C# ...
  • Python基本语法

    万次阅读 多人点赞 2019-06-14 00:05:41
    Python基础语法总结: 1.Python标识符 在 Python 里,标识符有字母、数字、下划线组成。 在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。 Python 中的标识符是区分大小写的...
  • 汉语语法和英语语法的区别

    千次阅读 2019-03-25 11:23:16
    如果让外教来教语法,那么仅仅就语法中的一些常见术语学生都难以理解,更不用说去全面理解系统的语法讲述和解释了。让外教教我们英语语法就好比让我们教老外中文语法,我们大多数人对中文语法都是视而不见、习以为常...
  • 数量结构重叠是汉语中一种常见语法现象,四种常用的数量结构重叠形式具有强大的语法功能,它们在句子中可以充当主语、谓语、宾语、定语、状语、补语等各种句法成分,但不同的形式担负的功能不完全相同,有不同的分布。
  • VB种if语句的常见形式

    万次阅读 2019-09-08 18:20:42
    VB种,if语句的形式为: ...下面用例子说明常见的三种形式: Private Sub Command1_Click() '形式1,标准形式 x = InputBox("请输入一个整数") y = InputBox("请输入一个整数") If x > y The...
  • .gitignore文件语法常见写法(就看这篇就行了) 1. 语法 空行会被忽略 匹配是区分大小写的,如:/abc 和 /Abc 含义不同 # 开头是注释,会被忽略 * 表示0-n个字符 ** 两个星含义是子目录子子目录等多层匹配 ? 匹配...
  • C++ 常用语法

    千次阅读 多人点赞 2017-09-09 19:56:59
    操作符boolalpha可用来将bool表达式输出或输入为false 或true的形式。 操作符noboolalpha可用来将bool表达式输出或输入0或1的形式。 bool flag; flag = ( 3 < 5 ); cout '\n' ; cout '\n' ; 1 true ...
  • 编译原理:语法分析器

    万次阅读 多人点赞 2019-04-29 17:01:40
    语法分析程序 文章目录语法分析程序一、作业目的和要求二、作业内容三、作业要求四、结果分析 一、作业目的和要求 通过设计、编制、调试一个典型的语法分析程序(任选有代表性的...选择对各种常见高级程序设...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 217,013
精华内容 86,805
关键字:

常见的语法形式