1.$Proerty与$!{Property}的区别
比如:
简单的key-value数据格式情况下
a.<C_APP_NME>$Applicant_CAppNme</C_APP_NME>,不是对象,写法正确!
b.<C_APP_NME>$!{Applicant_CAppNme}</C_APP_NME>,不是对象,写法正确,建议使用写法!
 
点评:a,b这两种写法都行,区别是如果Applicant_CAppNme的值为空,a写法会将$Applicant_CAppNme语法显示出来。所以,这种情况写法的运用最好使用b(因为如果表达式中需要引用外部对象方法,这种就不好办了)。另外一点区别注意,$!{}其中的!表示若名称Applicant_CAppNme值为空默认将值设置为空字符串,$!{#名字}表示如果#名字值为空,将显示为空,$#名字表示如果#名字值为空,将显示表达式$#名字。所以,最好写$!{#名字}格式!
 
对象数据格式情况下
a.$!{app.getComponent("base").get(0).getCProdNo()},是对象,写法正确,建议写法!
b.$app.getComponent("base").get(0).getCProdNo(),是对象,由于有多级引用关系也就是多次获取值,所以此写法获取不到值,写法错误!
点评:建议采用a写法,既然是对象,会遇到很多想得到对象某个属性值的时候,有引用关系存在,所以采用a,重要一点是由于这里是 "a对象.a对象的属性对象b.b对象.b属性. ...",多级引用关系一定要用$!{}写法才能获取到!
 
a.$!{app.getComposition()},写法正确,建议写法!
b.$!{app.getComposition()},写法正确!

c.$app.composition,写法正确!

d.$app.getComposition(),写法正确,建议写法!
点评:意思是取app对象的composition属性值,前提是必须有获取此属性值的get方法,如果你直接使用get方法去,get命名格式无所谓,但是如果是$app.composition,那get方法名一定要规范是getComposition了,也就是get属性名,建议使用带get的写法
 
语法foreach情况下#foreach ($result in $app.getComponent($cvrg))
a.$app.getComponent($cvrg) ,写法正确,在foreach的情况下建议写法,较直观!
b.$!{app.getComponent($cvrg)} _2,写法正确!

 
 
2.符号"."是Velocity保留语法符号,用于对象引用时,比如$Object.property,建议命名中不要包含它
Applicant_CAppNme 命名正确! Applicant.CAppNme 命名错误,会显示空值!
 
3.语法#if判断的字符串值比较用单引号或双引号都可以
a.#if($!{MESSAGESTATUSCODE}=="1"),写法正确!
b.#if($!{MESSAGESTATUSCODE}=='1'),写法正确!
点评:MESSAGESTATUSCODE是key,它的值是一个字符串
 
实战环境下的模版:
 REQUEST_15.xml
  1. <?xml version="1.0" encoding="GBK"?><!-- 发送报文模板 -->
  2. <PACKET type="REQUEST" version="1.0">
  3.  
  4. #set($base="PlyMain")
  5. #set($cvrg="Cvrg")
  6. #set($tgt="Tgt")
  7. #set($tgts="EntTgt")
  8. #set($applicant="Applicant")
  9. #set($insured="Insured")
  10. #set($bnfc="Bnfc")
  11.  
  12. <HEAD>
  13. <REQUEST_TYPE>$!{REQUEST_TYPE}</REQUEST_TYPE>
  14. <USER>$!{USER}</USER>
  15. <PASSWORD>$!{PASSWORD}</PASSWORD>
  16. </HEAD>
  17. <BODY>
  18. <BASE>
  19. <!-- ZZZG1姓名 -->
  20. <C_A2PP_NME>$!{app.getComponent($applicant).get(0).getCAppNme()}</C_A2PP_NME>
  21. <!-- 受ZG1姓名 -->
  22. <C_BNFC_PRSN_NME>$!{app.getComponent($bnfc).get(0).getCBnfcNme()}</C_BNFC_PRSN_NME>
  23.  
  24. <C_INSRNT_CNM>$!{app.getComponent($bnfc).get(0).getCInsuredNme()}</C_INSRNT_CNM>
  25.  
  26. <T_RATIO_TYPE>001</T_RATIO_TYPE>
  27.  
  28. <C_BSNS_TYP>19002</C_BSNS_TYP>
  29. <C_AGRI_TYPE>0</C_AGRI_TYPE>
  30.  
  31. <MMN_PRM>$!{app.getComponent($base).get(0).getNPrm()}</MMN_PRM>
  32.  
  33. <C_BU1SINESS_NO>$!{app.getComponent($base).get(0).getCBusiNo()}</C_BU1SINESS_NO>
  34.  
  35. <C_OPER_CDE>103990001</C_OPER_CDE>
  36.  
  37. <C_APP_MOBILE>$!{app.getComponent($applicant).get(0).getCAppMobile()}</C_APP_MOBILE>
  38.  
  39. <C_AGENCY_PR1OF_ID></C_AGENCY_PR1OF_ID>
  40. <C_SU2BBANK_NO />
  41.  
  42. <N_C3MM_PROP></N_C3MM_PROP>
  43. </BASE>
  44. <TGT><!--prodduce-->
  45.  
  46. <C_YL2>$!{app.getComponent($base).get(0).getCBicNo()}</C_YL2>
  47. #*
  48. 这里可以输入注释内容
  49. *#
  50. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0A27')
  51. $!{TX_C_SCHOOL_NA1ME}
  52. $!{TX_CD_COUN1TRY}
  53. $!{TX_CD_TGT_FLD117}
  54. #end
  55. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0A01')
  56. $!{TX_CA_BUILD_STR}
  57. $!{TX_CA_PROP2ERTY_ADDR}
  58. #end
  59. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0B09' || $!{app.getComponent($base).get(0).getCProdNo()}=='0B10')
  60. $!{TX_C_HOU2SE_STR}
  61. #end
  62. #if($!{app.getComponent($base).get(0).getCProdNo()}=='06C9')
  63. $!{TX_C_COU3NTRY}
  64. #end
  65. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0D19' || $!{app.getComponent($base).get(0).getCProdNo()}=='0D21' || $!{app.getComponent($base).get(0).getCProdNo()}=='06D5')
  66. $!{TXB_C_TG4T_FLD7}
  67. $!{TXB_P_NUM}
  68. $!{TXB_C_YL2}
  69. #end
  70. </TGT>
  71. <AA_CUSTOMER>
  72.  
  73. <MMN_APP_AGE>$!{app.getComponent($applicant).get(0).getCAppAge()}</MMN_APP_AGE>
  74.  
  75. <C_BNFC_NME>$!{app.getComponent($insured).get(0).getCBnfcNme()}</C_BNFC_NME>
  76. <!-- 123ZZG1与456ZZG1的关系=资助G1与456ZZD!G1关系,0627ZZ2品才有此字段发送 -->
  77. <!-- <C_APP_DRELATION>$!{app.getComponent($applicant).get(0).getCRelation()}</C_APP_DRELATION>-->
  78. #*
  79. 这里可以输入注释内容
  80. *#
  81. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0Q27')
  82. $!{TX_C_SUPPORT_NAME}
  83. $!{TX_C_RELATION}
  84. #end
  85. </AA_CUSTOMER>
  86. <!--t_bic_check1_rdr -->
  87. <RDR>
  88. ## D!ZZ3信息,注释内容
  89. #foreach ($result in $app.getComponent($cvrg))
  90. <INSRNC>
  91.  
  92. <N1_PERIOD>$!{result.getNPeriod()}</N1_PERIOD>
  93. #*
  94. ZZ2品注释内容
  95. *#
  96. #if($!{app.getComponent($base).get(0).getCProdNo()}=='0D7')
  97. <C_YLA13>$!{result.getNDductRate()}</C_YLA13>
  98. <C_YLD20>$!{result.getCLiabScope()}</C_YLD20>
  99. #end
  100. #if($!{app.getComponent($base).get(0).getCProdNo()}=='08A1')
  101. <C_TGT_OBJ1_CDE>$!{result.getCTgtTyp()}</C_TGT_OBJ1_CDE>
  102. #end
  103. </INSRNC>
  104. #end
  105. </RDR>
  106. </BODY>
  107. </PACKET>

Velocity写法注意的更多相关文章

  1. SRF之数据访问

    数据访问组件实现实体类和数据表映射.SQL语句配置执行.动态sql语句等功能,ORM方式能实现简单的对象和表的映射(配置类似hibernate),但比较单一(不支持一对多.多对多的情况),下边不做介绍 ...

  2. Velocity初探小结--velocity使用语法详解

    做java开发的朋友一般对JSP是比较熟悉的,大部分人第一次学习开发View层都是使用JSP来进行页面渲染的,我们都知道JSP是可以嵌入java代码的,在远古时代,java程序员甚至在一个jsp页面上 ...

  3. Velocity快速入门教程-脚本语法详解(转)

    1.变量 (1)变量的定义: #set($name = "hello")      说明:velocity中变量是弱类型的. 当使用#set 指令时,括在双引号中的字面字符串将解析 ...

  4. Velocity语言的介绍

    Velocity语言的介绍 2016-09-06 15:39:25 语言介绍 Velocity是一种Java模版引擎技术,是一个基于Java的模板引擎(template engine).她允许任何人简 ...

  5. 快速熟悉Velocity

    果然公司用的东西跟平时学的东西不太一样,我们公司前台页面并不是我们熟悉的.html或者.jsp文件,而是很多人不知道的 .vm文件,其实只要我们理解了jsp文件,vm文件也就是一些基本语法不同而已. ...

  6. Velocity教程【转】

    原文:http://blog.csdn.net/qq_25237663/article/details/52262532 Velocity是一个基于Java的模板引擎,通过特定的语法,Velocity ...

  7. 最新Velocity使用和Velocity语法

    Velocity语法 Velocity的使用要用到下面几个包,可以从官网下载,commons-collections.jar,velocity-1.4.jar,velocity-dept.jar; 1 ...

  8. Velocity(6)——#if指令

    下面是#If指令的一个简单而完整的示例: #if ($foo < 10) Go North #elseif ($foo == 10) Go East #else Go West#end 不能漏掉 ...

  9. Velocity(5)——#set指令

    引用可以让模板设计者生成动态内容,而指令允许设计者真正的负责页面的展现和内容. 指令是以#开头,后面紧跟一个关键字,比如if,else,foreach等.而这个关键字,是可以被放在{}中间的.这是规范 ...

随机推荐

  1. 洛谷——P1017 进制转换

    P1017 进制转换 题目描述 我们可以用这样的方式来表示一个十进制数: 将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式.例如:123可表示为 1\times ...

  2. HDU 1251 统计难题 (字典树)(查询是否为前缀)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submi ...

  3. linux查看进程内存占用

    ps -aux | grep xxx USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND 可以看到RSS ...

  4. CodeForces - 986C AND Graph

    不难想到,x有边连出的一定是 (2^n-1) ^ x 的一个子集,直接连子集复杂度是爆炸的...但是我们可以一个1一个1的消去,最后变成补集的一个子集. 但是必须当且仅当 至少有一个 a 等于 x 的 ...

  5. 【母函数】hdu2082 找单词

    普通型母函数详解见这里:http://www.wutianqi.com/?p=596 裸题,存个板子. #include<cstdio> #include<cstring> u ...

  6. [Eclipse]--Error:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path.

    一段时间没用eclipse后,再去打开以前的项目,发现一打开前线标红.查看错误的时候,如下图所示: Error:The superclass "javax.servlet.http.Http ...

  7. java web定时任务---Timer

    写在前面: 在最近的项目中需要每天定时对数据库表进行查询,并完成相关数据的更新操作.首先让我想到的是Timer类,记得在一开始维护那个老系统的时候,开了个接口,也涉及到了定时的操作.下面就记录下大概的 ...

  8. NSOperation的并发与非并发

    NSoperation也是多线程的一种,NSopertaion有2种形式  (1) 并发执行       并发执行你需要重载如下4个方法     //执行任务主函数,线程运行的入口函数    - (v ...

  9. hadoop FileSplit

    /** A section of an input file. Returned by {@link * InputFormat#getSplits(JobContext)} and passed t ...

  10. Ghost下的gho镜像分区工具

    直接gho镜像还原,有fat32和ntfs 链接: https://pan.baidu.com/s/1dGl6v65 密码: tjuz