Velocity魔法堂系列一:入门示例

本文介绍Velocity模板引擎的基础使用方法,包括如何用Velocity替代JSP作为Java Web服务端模板引擎,以及如何通过示例生成HTML表单。文章还详细介绍了Velocity模板文件的结构和Java代码的配置过程。

一、前言                          

  Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力。而且Velocity被移植到不同的平台上,如.Net的NVelocity和js的Velocity.js,虽然各平台在使用和实现上略有差别,但大部分语法和引擎核心的实现是一致的,因此学习成本降低不少哦。

  最好的学习资源——官网:http://velocity.apache.org/

  本系列打算采用如下结构对Velocity进行较为全面的学习,若有不妥或欠缺望大家提出,谢谢。

  1. 入门示例

  2. VTL语法详解

  3. 模板与宿主环境通信

  4. 基础配置项

  5. 深入模板引擎及调优配置

 

二、入门示例                        

  示例结果是生成如下的html表单:

复制代码
<form action="./submit">
<div>
  <label for="title">标题:</label>
  <input type="text" id="title" name="title"/>
</div>
<div>
  <label for="brief">摘要:</label>
  <input type="text" id="brief" name="brief"/>
</div>
<div>
  <label for="sex">性别:</label>
  <select id="sex" name="sex">
    <option value="0">男</option>
    <option value="1">女</option>
  </select>
</div>
<div>
  <label for="job">职业:</label>
  <select id="job" name="job">
    <option value="0">Java工程师</option>
    <option value="1">Net工程师</option>
  </select>
</div>
</form>
复制代码

   模板文件frm.vm

复制代码
##表单模板
##@author fsjohnhuang
##@version 1.0
## 引入外部模板文件
#parse('macro.vm')
## 主逻辑
<form action="$action">
#foreach($input in $inputs)
#input($input.title $input.id)
#end
#foreach($select in $selects)
#select($select.title $select.id $select.items)
#end
</form>
复制代码

   模板文件macro.vm

复制代码
## 生成input表单元素区域的宏
#macro(input $title $id)
<div>
  <label for="$id">$title</label>
  <input type="text" id="$id" name="$id"/>
</div>
#end
## 生成select表单元素区域的宏
#macro(select $title $id $items)
<div>
  <label for="$id">$title</label>
  <select id="$id" name="$id">
## VTL指令紧贴左侧才能确保结果的排版正常(不会有多余空格)
#foreach($key in $items.keySet())
    <option value="$key">$items.get($key)</option>
#end
  </select>
</div>
#end
复制代码

   Java代码:

复制代码
public static void main(String[] args) {
        // 初始化模板引擎
        Properties props = new Properties();
        props.put("file.resource.loader.path", ".\\vm");
        VelocityEngine ve = new VelocityEngine(props);
        // 配置引擎上下文对象
        VelocityContext ctx = new VelocityContext();
        ctx.put("action", "./submit");
        ArrayList<HashMap<String, String>> inputs = new ArrayList<HashMap<String,String>>();
        HashMap<String, String> input1 = new HashMap<String, String>();
        input1.put("id", "title");
        input1.put("title", "标题:");
        inputs.add(input1);
        HashMap<String, String> input2 = new HashMap<String, String>();
        input2.put("id", "brief");
        input2.put("title", "摘要:");
        inputs.add(input2);
        ctx.put("inputs", inputs);
        ArrayList<HashMap<String, Object>> selects = new ArrayList<HashMap<String,Object>>();
        HashMap<String, Object> select1 = new HashMap<String, Object>();
        selects.add(select1);
        select1.put("id", "sex");
        select1.put("title", "性别:");
        HashMap<Integer, String> kv1 = new HashMap<Integer, String>();
        kv1.put(0, "");
        kv1.put(1, "");
        select1.put("items", kv1);
        HashMap<String, Object> select2 = new HashMap<String, Object>();
        selects.add(select2);
        select2.put("id", "job");
        select2.put("title", "职业:");
        HashMap<Integer, String> kv2 = new HashMap<Integer, String>();
        kv2.put(0, "Java工程师");
        kv2.put(1, "Net工程师");
        select2.put("items", kv2);
        ctx.put("selects", selects);
        // 加载模板文件
        Template t = ve.getTemplate("test.vm");
        StringWriter sw = new StringWriter();
        // 渲染模板
        t.merge(ctx, sw);
        System.out.print(sw.toString());
    }
复制代码

 Velocity模板引擎使用时的关注点分别为以外部文件形式存在的Velocity模板Java代码调用

 Velocity模板由VTL(Velocity Template Language)引擎上下文对象构成;Java代码调用部分则负责初始Velocity引擎构建引擎上下文对象加载Velocity模板启动模版渲染。而Velocity模板与Java代码调用部分通信的纽带就是引擎上下文对象了。

 

三、总结                              

 现在我们对Velocity引擎应该有个大概的了解,后续内容将对上述内容逐一深入。

 尊重原创,转载请注明来自:http://www.cnblogs.com/fsjohnhuang/p/4112328.html  ^_^肥仔John

 吐槽:倘若对文本的排版有强烈的要求,那么Velocity就不是最佳选择了。

 如上述示例,若想改成如下格式就要重新设计模板形式了:

复制代码
<form action="./submit">
  <div>
    .................
  </div>
  <div>
    .................
  </div>
  <div>
    .................
  </div>
  <div>
    .................
  </div>
</form>
复制代码
纸张与塑料实例分割数据集 、基础信息 • 数据集名称:纸张与塑料实例分割数据集 • 图片数量: 训练集:5304张图片 验证集:440张图片 总计:5744张图片 • 训练集:5304张图片 • 验证集:440张图片 • 总计:5744张图片 • 分类类别: 纸张(paper):常见的可回收材料,广泛用于包装和日常用品。 塑料(plastic):合成聚合物材料,在垃圾处理和回收中需准确识别。 • 纸张(paper):常见的可回收材料,广泛用于包装和日常用品。 • 塑料(plastic):合成聚合物材料,在垃圾处理和回收中需准确识别。 • 标注格式:YOLO格式,包含实例分割多边形标注,适用于实例分割任务。 • 数据格式:图片数据来源于相关领域,标注精确,支持模型训练。 二、适用场景 • 垃圾自动分类系统开发:数据集支持实例分割任务,帮助构建能够精确分割纸张和塑料物体的AI模型,用于智能垃圾桶、回收设施或环境监测系统。 • 环境监测与保护应用:集成至环保监控平台,实时检测和分类垃圾,促进垃圾分类、回收和可持续发展。 • 学术研究与创新:支持计算机视觉与环保领域的交叉研究,为垃圾识别和材料分类提供数据基础,推动AI在环境科学中的应用。 • 工业自动化与物流:在制造业或物流环节中,用于自动化检测和分类材料,提升生产效率和资源管理。 三、数据集优势 • 精准标注与实用性:每张图片均经过仔细标注,实例分割边界精确,确保模型能够学习纸张和塑料的细粒度特征。 • 数据多样性:涵盖多种场景和条件,提升模型在不同环境下的泛化能力和鲁棒性。 • 任务适配性强:标注兼容主流深度学习框架(如YOLO等),可直接用于实例分割模型训练,并支持扩展至其他视觉任务。 • 应用价值突出:专注于可回收材料检测,为垃圾管理、环保政策和自动化系统提供可靠数据支撑,助力绿色科技发展。
代码转载自:https://pan.quark.cn/s/fc36d9cf1917 《建筑工程施工强制性条文检查记录》是针对建筑工程施工过程中的核心环节进行合规性审核的关键性文件,其目的在于保障施工质量与施工安全。 这份文件收录了建筑工程施工过程中必须遵守的国家强制性准则、指令和技术规范,对于建筑施工作业单位、监理机构以及相关行政管理部门而言,均构成不可替代的参考资料。 建筑工程施工强制性条文主要涵盖以下几个方面的内容:1. **设计与施工准则**:工程项目的设计需符合国家的建筑设计准则,涵盖结构稳固性、防火性能、抗震性能、环保性能等方面的标准。 在施工作业阶段,必须严格依照设计图纸和施工计划进行,任何变更均需获得设计单位的致许可。 2. **建筑材料品质**:所有投入使用的建筑材料,例如混凝土、钢筋、砌块等,都必须具备出厂合格证明,并接受第三方检测机构的品质验证。 严禁采用不合格或已过有效期的材料。 3. **施工安全措施**:在施工作业期间必须恪守安全生产准则,设置安全防护装置,例如脚手架、安全网、警示标识等。 施工人员需接受安全知识培训,并使用个人防护用品。 4. **环境管理**:施工作业应控制噪音、粉尘、废弃物等对环境可能造成的负面影响,推行绿色施工理念,采取降尘、防噪、废弃物分类处理等手段。 5. **工程质量监管**:每个施工作业阶段完成后,需实施自检、互检和专项检查,确保每道工序的合格性。 对于基础工程、主体结构、防水工程等关键部位,应执行严格的验收流程。 6. **工程验收流程**:工程完工后,必须依照国家规范进行验收,涵盖单位工程验收、分部工程验收和整体工程验收,确保工程符合设计和使用需求。 7. **文档管理**:施工作业期间产生的技术文件、检测报告、会议记...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值