正如前面所讲的,WebX中View使用Velocity模板引擎来实现的。

Velocity

Velocity是一个基于Java的模板引擎,它可以让视图的设计者在web页面中引用java代码中定义的数据对象和命令,从而实现真正意义上的MVC模式,保证了系统长期可维护性。下面简单地介绍下,Velocity的使用,关于Velocity的更详细介绍参考:http://velocity.apache.org/engine/devel

Velocity中语句都是#开头的,变量的定义都是$开头的
注释代码:## #* *#
模板的引用: #include() #parse()

变量

变量定义和使用

    定义:#set($a="velocity")使用:$a $!a

变量名规范:字母开头,中间可以由下划线、连接符或者数字组成
!的作用是,为空的时候输出为空;如果不加velocity莫波引擎不会解析空的变量

    变量的属性: $customer.Address $customer.name #set($customer.name="liujiajie")变量的方法: $customer.getAddress() $customer.getName()

对变量属性的操作间接使用了对象的get/set方法

Q: Velocity模板变量都是开头的,如何输出开头的,如何输出var这样的字符?
A: 使用\转义, #set(var="hello");$var=var="hello"); \$var=var,对应的$var=hello

Q: 单引号双引号区别?
A: 单引号里的变量不会被解析。#literal() … #end可以用与一段代码的中,这样引擎也不会解析其中的内容。

变量类型

数组: {"A", "B", "C"} 访问.get(0)
Map: {"key1":"val1", "key2":"val2"}
串: 连字符 $firstname$secondname

内置变量

[1..2] //range操作

变量操作

#set($id=1)
#set($id=$id+1)

语句

  • foreach
 #foreach( $name in $names)#if($name)#elseif()#end#end
  • if elseif else end
    逻辑的与或非 ! && ||
  • stop
    #stop 用于停止模板解析
  • macro
    定义宏 #macro(d) #end, 使用宏的时候 #d()
    当然宏中可以传递参数 #macro(tablerows colorcolor somelist)

关于更多Velocity的内容参照官网的介绍,这里的说明基本上能满足常见的业务处理,后续会针对Velocity模板的处理做专题的说明。

Velocity结合Html/CSS/JS

在实际的使用中,Velocity语法都是嵌入到HTML/CSS/JS文件中,其作用主要是实现动态数据的渲染控制。例如,典型的Table表处理时,对数据的渲染:

<table border="1"><tr><th>Month</th><th>Savings</th></tr>#foreach($item in $items)<tr><td>$item.month</td><td>$item.savings</td></tr>#end
</table>

WebX中的扩展

WebX中能够很好地支持Velocity模板引擎,同时添加了很多的服务支持,这里主要介绍page服务和url服务 。在webx-component.xml文件中有相关的配置:

<!-- 将beans暴露给模板。 -->
<services:pull><pull-factories:utils /><pull-factories:rundata-tool /><pull-factories:csrfToken /><pull-factories:form-tool /><pull-factories:control-tool /><pull-factories:uris-tool />
</services:pull>

这方面的资料比较少,后续用到的时候再补全

page

$page的处理, web.xml page-tool用于处理$page对象
常见的使用方法:

$page.setTitle("")

uri

在示例程序中会看到:

#set($url = "$app1Link.setTarget('simple/download.do').addQueryData('filename', 'blob')")
<a href="$url">$url</a>

这里的$app1Link是哪里来的?又有啥作用?现在可以明确的是app1Link这个变量肯定不是velocity模板提供的,grep命令看一下,找到对应的代码在uris.xml文件中配置的。仔细看之后发现这里实际上是使用了URIBrokerService。

UriBrokerService简介

Web由有许多资源组成,比如HTML文档,图片,视频, css/javascript等。每一种资源都由一种叫做资源标示符(URI)的符号来定位。URI除了出现在Web页面上,对于程序员来说,有时也会将它作为字面值常量定义在程序当中。

这类静态录入的URI,在早期的系统开发过程中,的确让程序员屡试不爽。但随着系统功能的不断扩充,复杂性越来越高,静态录入URI使得整套系统变得难以扩展和维护。为了有效解决静态录入URI带来的维护和扩展性问题,URIBroker Service应运而生。

URIBroker Service的特点是以统一的配置和动态渲染的方式来生成URI字符串。在系统重构或移植时,你只需要修改URIBroker Service的统一配置文件 ,无需修改一行代码即可完成全系统URI的无缝迁移。URLBroker Service从本质上,解决了URI移植性,扩展性差等问题,同时也简化了开发人员的编码工作量。

Velocity模板中如何使用

常见的使用方式如下:

$applLink.setTarget("simple/download.do")
$applLink.setTarget("simple/download.do").addQueryData('filename', 'name')

WebX实践指南_页面模板(二)相关推荐

  1. devops实践指南_开发DevOps的实用指南:减少八卦的步骤

    devops实践指南 我的一个软件开发的朋友最近问我,如果我可以告诉他,他可以做什么亲自来鼓励更多的合作与理解的工作环境-一个与更一致建议 从未来 的社区的DevOps . 我们之间的对话很长,他的情 ...

  2. dita最佳实践指南_艺术资产–最佳做法指南

    dita最佳实践指南 Unity支持来自各种程序或来源的纹理3D模型. 该简短指南由游戏美术师和Unity开发人员共同整理,以帮助您创建在Unity项目中可以更好,更高效地工作的资产. 这将在适当时候 ...

  3. 大数据:技术与应用实践指南_大数据技术与应用社团 社会实践总结篇

    不知不觉,我们已经在家里呆了七个月了 也不知道宿舍还好吗 小伙伴们有没有在家好好学习 在这个漫长的假期里,我们热爱学习的大数据技术与应用社团举办了为期七天的社会实践活动. 本次实践活动主要内容为网页设 ...

  4. 读《DevOps实践指南》笔记二

    第三部分 第一步:流动的技术实践 第9章 为部署流水线奠定基础 70 9.1 按需搭建开发环境.测试环境和生产环境 71 不再需要运维团队手动构建和配置环境,而是可以使用自动化的方式完成以下操作:  ...

  5. python数据科学实践指南_《Python数据科学实践指南》——导读-阿里云开发者社区...

    前 言 为什么要写这本书 我接触大数据技术的时间算是比较早的,四五年前当大数据这个词火遍互联网的时候,我就已经在实验室里学习编程及算法的知识.那个时候我一心想要做学术,每天阅读大量的英文文献,主要兴趣 ...

  6. Istio服务网格实践指南 学习笔记(二) Istio架构

    个人学习Istio系列  学习笔记 Istio架构篇 本篇部分参考原书 https://jimmysong.io/istio-handbook/ 仅为个人学习笔记 这幅图中描述了以下内容: 1.Ist ...

  7. ubuntu wifi固定ip_自制wifi遥控小车!ESP8266实践指南(二)

    上次带大家利用ESP8266自制了wifi控制的LED点阵屏幕,大家觉得怎么样呢? 手把手教你用wifi控制显示屏!ESP8266实践指南(一) 今天我们来做点更有意思的~ wifi遥控小车! 一.所 ...

  8. 《智能风控实践指南》笔记(二)

    本文是对<智能风控实践指南>中模型策略分析方法这一小节中交换集分析(又叫换入换出分析)中的拒绝推断部分展开谈谈.这个方法正好之前一位做模型的朋友详细和我说过,这次在书中看到确实有产生一些共 ...

  9. 个人信息安全影响评估指南_发布 | 网络安全标准实践指南—移动互联网应用程序(App)收集使用个人信息自评估指南...

    关于发布<网络安全标准实践指南-移动互联网应用程序(App)收集使用个人信息自评估指南>的通知 信安秘字[2020] 40号 各有关单位: 为落实<网络安全法>相关要求,围绕中 ...

最新文章

  1. 逃离湾区,下一站是哪里?西雅图 PK 奥斯汀
  2. 北区首届科技文化潮流节启幕!诚邀科技企业参展,共同打造海淀北部最大科技“party”...
  3. SpringMvc多语言配置
  4. Swing组件集合的事件处理(二)
  5. c modern approach‘s forteenth chapter‘s study
  6. 树莓派i2c python_树莓派2 python i2cPython中chr、unichr、ord字符函数之间的对比
  7. javaScript 对象访问属性的另一种方式
  8. 使用miniSipServer为中小企业搭建VOIP服务器
  9. Python Twisted 简介
  10. 如何把握银行信息科技风险管理的“度”?
  11. Linux驱动面试总结
  12. NOI(OJ)编程基础篇
  13. 华为光伏usb适配器_支持22.5W超级快充无线充电,华为P40手机保护壳深度拆解
  14. GeoServer图层组:多个图层叠加效果
  15. html如何实现表情加文字发布,vue实现文字表情同时输入的方法
  16. nginx 拦截非法字符,nginx禁止url访问特定字符,nginx过滤url访问
  17. 百度NLP十年布局:翻越认知智能高山,架起通往现实世界的桥
  18. 从实战中学前端:html+css实现漂亮的按钮
  19. 你为什么一定要去美国?给我一个理由
  20. java 快速创建List 数组array转List

热门文章

  1. 词汇难关 记忆雅思单词20个经典方法特别推荐
  2. 教程-使用FirefoxSend搭建一个临时文件分享系统
  3. 回合制网游鼠标偏移解决
  4. cadence导入dxf文件_Allegro中导入导出DXF文件
  5. 云服务器代理_虚拟主机代理_服务器代理-谈谈IDC加盟合作那些事!
  6. 财务室扫描仪(XT100)--驱动找不到
  7. 实践与分享:可激活Windows 7旗舰版、专业版、家庭高级版、家庭普通版的“Retail Key”...
  8. 操作系统实验:文件管理 C语言
  9. 成为优秀的量化交易者,你需要这五种能力
  10. 使用定时器编程,在实时显示当前时间,每隔2秒时钟内容更新一次