作者:EasyJF开源团队 大峡
在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑。在N年前的脚本语言时代,无论是asp、 php还是jsp,我们基本是都是把这两者柔和在一起的。尽管我们想方设法做好很多函数或者包含文件来努力达到软件的复用,但仍然无法满足多变的用户需 求,这主要是因为以前的纯脚本编码方式无法很好支持及应用面向对象(OO)领域中的强大功能。
在常见的B/S软件项目中,界面的设计包括html界面、Wap界面及其它由文本字符协议为基本表示的界面等。以我们接触最多的html页面为例子,在 做这些界面的时候往往需要美工先使用photoshop或fireworks等图形界面设计工具进行全局设计,然后再使用进行Dreamweaver等 html页面制作工具进行加工制作。而强大的程序逻辑及后台处理都是由服务器端程序完成,这些程序具有较高的稳定性,其开发工具如JBuilder、 Eclipse等对View层的界面无法很好的支持(当然那些用记事本写界面的应用除外),这就使得很多MVC框架的设计都无法两全齐美。
作位一个比较友好的MVC的框架,在简化服务器应用开发的同时,还需要在View这一层设计上不要过多的影响到界面人员的工作,最基本的要求就是不要过 多的加入一些设计软件不支持的标签等元素(如Struts的很多标签在Dreamweaver中都不支持)。这里我们以EasyJWeb为例,探讨在 View层如何实现比较合理的设计。
EasyJWeb作为一个快速Java Web MVC框架,其设计目标不尽是要简化软件开发人员的代码书写工作,更是要能方便界面设计人员的工作。
当然,要使界面能跟后台程序逻辑能融合,显示界面及程序逻辑之间需要一定的对话协议在所难免。EasyJWeb作为一个MVC框架,同样也存在着这样的对话协议,这就是EasyJWeb中的界面模板标识语言。
在当前发布的版本中,EasyJWeb界面模板标识语言使用的是Apache开源的Velocity模板引擎(template engine),当然以后会根据际需要加入更多的模板引擎以供框架应用者选择。
Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的,但强大的同时也增加了应用复杂 性。
理论上你可以在EasyjWeb模板使用所有Velocity的脚本及功能,但我们不推荐你在界面模板中使用过多过复杂的脚本表达方式,在万不得已的情况下,不要在界面模板中加入任何复杂的逻辑,更不要在界面模板中加入变量声明、逻辑运算符等等。
在EasyJWeb中,我们提供了四条基本的模板脚本语句,基本上就能满足所有应用模板的要求。这四条模板语句很简单,可以直接由界面设计人员来添加。在当前很多EasyJWeb的应用实践中,我们看到,所有界面模板中归纳起来只有下面四种简单模板脚本语句即可实现:
1、$!obj 直接返回对象结果。
如:在html标签中显示java对象msg的值。<p>$!msg</p>
在html标签中显示经过HtmlUtil对象处理过后的msg对象的值.<p>$!HtmlUtil.doSomething($!msg)</p>
2、#if($!obj) #else #end 判断语句
如:在EasyJWeb各种开源应用中,我们经常看到的用于弹出提示信息msg的例子。
#if($msg)
<script>
alert('$!msg');
</script>
#end
上面的脚本表示当对象msg对象存在时,输出<script>等后面的内容。
3、#foreach( $info in $list) $info.something #end 循环读取集合list中的对象,并作相应的处理。
如:EasyJF开源论坛系统中论坛首页显示热门主题的html界面模板脚本
#foreach( $info in $hotList1)
<a href="/bbsdoc.ejf?easyJWebCommand=show&&cid=$!info.cid" target="_blank">$!info.title</a><br>
#end
上面的脚本表示循环遍历hotList1集合中的对象,并输出对象的相关内容。
4、#macro(macroName)#end 脚本函数(宏)调用,不推荐在界面模板中大量使用。
如:在EasyJF简易订销管等系统中经常看到的一个排序状态显示的模板内容。
函数(宏)定义,一般放在最前面
#macro(orderPic $type)
#if ($orderField.equals($type))
<img src="http://images.cnblogs.com/ico/${orderType}.gif">
#end
#end
具体的调用如:<font color="#FFFFFF">头衔#orderPic("title")</font>
总结:
当然,在实际应用项目中,为了实现界面的更加友好、人性化,会出现很多复、易变的需求。如根据对象的不同状态,显示不同的提示颜色、提示语音等功能。在这 种时候,仍然要慎用太多的模板脚本功能,大多数需求都可以通过变通的方式解决,有些信息可以直接在对象中增加逻辑转化信息,有些界面要求可以通过在界面中 使用与特定界面有关的表达方式来实现,如html页面中使用javascript、css,Wap页面中使用WMLScript等等。只有,这样才能确保 证你的系统核心不受界面的的影响及控制,才能更好的扩展及维护。
我们希望你能成为真正的程序高手,而不只是精通某个处于表层的脚本语言,因此也不希望广大Java开发人员在View层消耗太多的时间。
由于水平有限,本文所谈的内容有N多不合理或者需要改进的地方,恳请大家指正!
附:EasyJWeb简介
EasyJWeb是基于java技术,应用于WEB应用程序快速开发的MVC框架,框架设计构思来源于国内众多项目实践,充分借签了当前主流的开源 Web框架(Struts、JSF、Tapestry 、Webwork等),吸取了其优点及精华,利用Velocity作为模板页面引擎,是一个实现了页面及代码完全分离的MVC开发框架,是一个旨在于为中 小型Web应用系统提供快速开发实践的简易Web框架。
EasyJF开源团队于2006年初才开始建设,因此当前整个开发团队组建以及所发布的作品,都显得极不成熟。EasyJWeb仍然处于测试阶段,请广大的Java爱好者多多批评及建议,同时也非常欢迎您能加入到我们的国产开源队伍中。
EasyJWeb官方网址:www.easyjf.com
EasyJF团队官方网址:www.easyjf.com
http://www.cnblogs.com/siye1982/archive/2007/11/14/959678.html
相关推荐
** Velocity语法基础 ** 1. 变量引用:Velocity使用`$`符号来引用变量,如`$name`。如果变量未定义,Velocity会自动忽略,避免抛出异常。 2. 指令控制:Velocity提供了多种指令,如`#set`用于赋值,`#if`用于条件...
【Velocity语法以及整合struts2总结】 Velocity是一个开源的Java模板引擎,它是Apache软件基金会的Jakarta项目的一部分。Velocity将HTML代码与业务逻辑分离,使得开发者可以专注于内容和设计,而不用关心数据如何...
再者,从语法格式上来讲,Velocity 和 Freemarker 的语法格式不同,Velocity 的语法更加简洁,而 Freemarker 的语法更加灵活。不同的开发者可能会有不同的倾向性,但是Freemarker 的语法更加强大。 最后,从性能上...
总之,"brackets-velocity" 插件是 Brackets 用户处理 Velocity 项目的一个强大工具,它利用 JavaScript 实现了对 Velocity 语法的高亮显示,极大地提升了开发者的开发体验和代码质量。通过这个插件,你可以更好地...
velocity语法中文版,还有详细例子解析。
### Velocity语法精析 Velocity是一种基于Java的模板引擎,它允许开发者通过简单的语法来动态生成HTML、XML或任何文本格式的文档。其语法简洁且功能强大,被广泛应用于Web开发中,尤其在Java企业级应用中表现突出。...
Velocity 语法大全 Velocity 语法大全是 Apache Velocity 项目的一部分,是一个基于 Java 的模板引擎。Velocity 语法大全提供了一些基本语法和实践指南,帮助开发者快速掌握 Velocity 语法。 基本语法 1. `#` ...
JAVA 中 Velocity 语法基础 Velocity 是一个基于 Java 的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用由 Java 代码定义的对象。Velocity 应用于 web 开发时,界面...
### Velocity 语法详解 #### 1. 变量 ##### 定义 在 Velocity 模板语言中,变量可以通过 `#set` 指令进行定义。这些变量是弱类型的,意味着无需事先指定数据类型即可直接使用。例如: ```velocity #set($name = ...
Velocity模板技术语法详细介绍,包括很详细的示例代码 1.变量………………………………………………………………………………1 2.循环………………………………………………………………………………2 3.条件语句...
### Velocity语法与使用方法 #### 1. 变量定义与引用 Velocity允许在模板中定义变量,并在后续使用中引用这些变量。变量定义通常使用`#set`指令进行: - 示例:`#set($name="hello")`,定义了一个名为`$name`的...
# Velocity语法与Velocity包详解 Velocity是一个强大的Java模板引擎,它的设计目标是让开发者能够将显示逻辑从应用程序的业务逻辑中分离出来。Velocity通过提供一个简单的模板语言,使得非程序员如网页设计师也能...
VTL 语法简单易学,易于掌握。VTL 主要包括以下要素: * 变量:在 VTL 中,变量用于存储和显示数据。 * 指令:VTL 提供了多种指令,例如 if、else、foreach 等,用于控制模板的执行流程。 * 函数:VTL 支持用户定义...
7. **错误处理**:Velocity 提供了良好的错误处理机制,当模板中出现语法错误或引用的Java对象不存在时,会给出清晰的错误信息,方便调试。 8. **国际化支持**:Velocity 支持多语言环境,可以方便地处理国际化...
总的来说,Velocity语法简洁且强大,允许Web开发者灵活地将动态数据整合到静态模板中,提高了开发效率,同时保持了良好的代码组织结构。通过熟练掌握VTL,开发者能够创建出高效、可维护的Web应用程序。
Velocity 语法详解 Velocity是一种基于Java的模板引擎,用于生成Web页面的模板语言。它具有灵活的语法结构和强大的功能,广泛应用于Web开发中。本文将详细介绍Velocity的语法规则和使用方法。 变量 在Velocity中...
- **语法规则**:Velocity使用一种简单的、易于理解的语法,称为Velocity Template Language (VTL)。开发者可以通过`$variable`来引用Java对象,`#if`、`#foreach`等控制结构实现条件判断和循环。 - **模板继承**:...
1. **语法简洁性**:Freemarker的语法可能更为简洁,如其使用`<#if>`、`<#foreach>`等,而Velocity则使用`#if`、`#foreach`。 2. **灵活性**:Velocity的宏功能相对强大,更易于复用和扩展,而Freemarker的模板继承...