Velocity 基础语法

#set($count=$Integer.parseInt($auth_count))

#foreach($i in [1..$count])

$application_prefix.trim()as_hs_auth00${i}

#end

1通用规则

1) "#":用来标识Velocity的脚本语句,包括#set、#if、#else、#end、#foreach等。

2) "$":用来标识一个对象(或理解为变量)。

3) "{}":用来明确标识Velocity变量。

2 简单替换

   (适用于简单的变量替换)

语法

                     name: 变量名(变量名中除下划线、连接符外,不能含有其他特殊字符)

                     ${name} 有值则替换;无则原样。

                     $!{name} 有值则替换;无则为空。   

eg: ${}  $!{}

参数:{user=root}

替换前:  

                 <username>${user}</username>

                 <workspace>${workspace}</workspace>

                 <database>$!{database}</database>

3 循环遍历

(适用于deploy.xml中的表格类型参数、多选类型参数、服务器参数)

语法

         a.遍历数组

              #foreach($var in $arrays ) // 集合包含下面三种Vector,Hashtable,Array

                       ......

              #end

         b.循环对象

        ⅰ第一种方法

              #foreach($obj in $data.entrySet())                                          <${obj.getKey()}>${obj.value}</${obj.getKey()}> //获取key-value

               #end

         ⅱ第二种方法

               #foreach($key in $data.keySet())

                   <$key>$data.get($key)</$key> //获取key-value

              #end

4多层遍历循环嵌套

 (适用于类似表格嵌套的场景)

4.1 效果

(红色部分:可变参数;蓝色标签:闭合段可以出现多个;)

<servers keypattern=".*" desc="start1">

 <server name="server1" host="10.139.102.127" port="6379">

                <param name="minIdle" value="10" />

          <param name="maxIdle" value="100" />

  <param name="maxActive" value="1000" />

<param name="maxWait" value="3000" />

<param name="readOnly" value="false" />

<param name="slaveof" value="servername" />

<param name="save" value="false" />

</server>       

<server name="server3" host="10.139.54.65" port="6379">

<param name="minIdle" value="10"/>

<param name="maxIdle" value="100"/>

<param name="maxActive" value="500"/>

<param name="maxWait" value="3000"/>

<param name="readOnly" value="false"/>

<param name="slaveof" value="servername"/>

<param name="save" value="false"/>

</server>

</servers>

<servers keypattern="^2.*" desc="start2">

<server name="server2" host="127.0.0.1" port="6390">

<param name="minIdle" value="10" />

<param name="maxIdle" value="100" />

<param name="maxActive" value="500" />

<param name="maxWait" value="3000" />

<param name="readOnly" value="false" />

<param name="slaveof" value="servername" />

<param name="save" value="false" />

</server>

<server name="server3" host="127.0.0.1" port="6391">

<param name="minIdle" value="10" />

<param name="maxIdle" value="100" />

<param name="maxActive" value="500" />

<param name="maxWait" value="10000" />

<param name="readOnly" value="true" />

<param name="slaveof" value="servername" />

<param name="save" value="false" />

</server>

</servers>

4.2 deploy.xml中参数配置

<!-- 一个表格实现表格嵌套   -->

<variables describe="集群基本参数">

     <field name="servers" label="服务配置" type="grid" >

         <field name="keypattern" label="keypattern" type="input"></field>

         <field name="server_ip" label="服务IP" type="input"></field>

         <field name="server_port" label="服务PORT" type="input"></field>

         <field name="save" label="是否保存" type="select" options="false:否;true:是">false</field>

     </field>

</variables>

4.3 velocity语法模板

#set($serverIds="") //设置变量

#foreach($server in $servers)

     #set($count=0) 

     #if($serverIds.length()>0)

         #foreach($value in $serverIds.split(";"))

              #if($value != $server.keypattern )

                   #set($count=$count+1)

              #end

         #end

         #if($count == $serverIds.split(";").size())

              #set($serverIds=$serverIds+";"+$server.keypattern)

         #end

     #else

         #set($serverIds=$server.keypattern)

     #end

#end   

 //以上绿色部分是将效果中servers的keypattern值去重复并缓存供下面使用

#foreach($value in $serverIds.split(";"))  //取出已缓存的servers的keypattern值

     <servers keypattern="$value" desc="start1">  //生成servers标签

         #foreach($server in $servers)    //遍历表格参数

//将表格行参数中keypattern值和缓存中的比较,避免生成多段servers标签并为其添加子server标签

             #if($value==$server.keypattern)

                   <server name="$server.server_name" host="$server.server_ip" port="$server.server_port">

                      <param name="minIdle" value="10" />

                      <param name="maxIdle" value="100" />

                      <param name="maxActive" value="1000" />

                      <param name="maxWait" value="3000" />

                      <param name="readOnly" value="false" />

                      <param name="slaveof" value="servername" />

                      <param name="save" value="$server.save" />

                   </server>

              #end

         #end

     </servers>

#end

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏进击的君君的前端之路

firstElementChild、firstChild 、childNodes和children方法

1202
来自专栏Java帮帮-微信公众号-技术文章全总结

Java基础-day10-代码题-继承&抽象类

Java基础-day10-代码题-继承&抽象类 1.门类继承题: 编写代码,实现如下功能: (1)定义一个门类, 包含3个属性:宽度width 和 高度hei...

4466
来自专栏小樱的经验随笔

Codeforces Beta Round #1 A,B,C

A. Theatre Square time limit per test:1 second memory limit per test:256 megabyt...

2975
来自专栏Python

JavaScript基础

一 JavaScript的基础 1.1 JS的引入方式 1 直接编写 <script> alert('hello yuan') ...

2208
来自专栏攻城狮的动态

简谈选择排序

3385
来自专栏三流程序员的挣扎

mermaid 语法

文字里用引号避免一些特殊字符的错误。比如矩形节点里有 () 时就无法渲染,所以加上引号。

7893
来自专栏Golang语言社区

Go语言struct类型详解

struct Go语言中,也和C或者其他语言一样,我们可以声明新的类型,作为其它类型的属性或字段的容器。例如,我们可以创建一个自定义类型person代表一个人的...

2774
来自专栏marsggbo

jquery的html,text,val

.html()用为读取和修改元素的HTML标签 .text()用来读取或修改元素的纯文本内容 .val()用来读取或修改表单元素的value值。 这三个方法功能...

1925
来自专栏Golang语言社区

实效go编程--2

Go函数的返回值或结果“形参”可被命名,并作为常规变量使用,就像传入的形参一样。 命名后,一旦该函数开始执行,它们就会被初始化为与其类型相应的零值; 若该函数执...

3357
来自专栏咸鱼不闲

jsoup爬虫工具的简单使用

解决方案: 1.通过url 获得doucment对象, 2.调用select()等方法获得Elements对象, 3.调用.text()等方法,获得自己想要的内...

3194

扫码关注云+社区