Velocity 的macro(2)

本文通过对比使用传统Java代码和Velocity模版引擎两种方式来渲染带有交替行颜色的表格,展示了Velocity如何有效分离业务逻辑与表现层,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上篇举了一个比较简单得了例子,用来说明他的macro的用途,这里举一个相对复杂的例子来说明macro的进一步用法:

效果:
定义一个模版这个模版可以输出一个表格,表格的效果是每隔一行用不同的颜色进行显示。

1. 采用Velocity之前的实现
比如我们有一个结果集rs

<%int count=1:
String clolor="CCCC";
%>
<table>
<%while(rs.next){
if(count%2==0){
clolor="FFFF"
}else{
clolor="CCCC";
}
%>
<tr color="">
<td>
<%=rs.getString(1)%>
td>
<td>
<%=rs.getString(2)%>
td>
tr>
<%
count++;}
%>
table>
还有一种方法是将rs转换成list。

for(int i=0;i
if(i%2==0){
color="FFFF"
}else{
color="CCCC"
}

其它方法:采用JSTL+EL来实现,还可以采用相应组件display、CE等。这里不进行讨论。
2. 采用Velocity进行动态实现
2.1 模版代码
#macro (writeTable $productList)
#set ($rowCount = 1)
#foreach($product in $productList)
#if ($rowCount % 2 == 0)
#set ($bgcolor = "#FFFFFF")
#else
#set ($bgcolor = "#CCCCCC")
#end
<tr>
<td bgcolor="$bgcolor">$producttd>
<td bgcolor="$bgcolor">$producttd>
tr>
#set ($rowCount = $rowCount + 1)
#end
#end
#set ($products = ["one", "two", "three"])
<html>
<head>
<title>Titletitle>
head>
<body>
<table>
#writeTable($products)
#include ("footer.vm")
table>
body>
html>

2.2 java代码 package com.lht.velocity;

import java.io.StringWriter;
import java.io.Writer;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
public class Macro2 {
public static void main(String[] args) throws Exception {
Velocity.init();
Template t = Velocity.getTemplate("macro2.vm");

VelocityContext ctx = new VelocityContext();

Writer writer = new StringWriter();
t.merge(ctx, writer);

System.out.println(writer);
}
}

3. 执行结果 <html>
<head>
<title>Titletitle>
head>
<body>
<table>

<tr>
<td bgcolor="#CCCCCC">onetd>
<td bgcolor="#CCCCCC">onetd>
tr>
<tr>
<td bgcolor="#FFFFFF">twotd>
<td bgcolor="#FFFFFF">twotd>
tr>
<tr>
<td bgcolor="#CCCCCC">threetd>
<td bgcolor="#CCCCCC">threetd>
tr>
footer.......... table>
body>
html>

4. 比较
从实现上来说在采用Velocity之前页面中引入了过多的java代码,当然如果采用自定义标签、JSTL之类的话也可以避免这些的。自己现在还没有体会到Velocity的真正用处,只能理解到他可以有效的 分离业务逻辑和表现层。之所以对其进行学习是因为项目中用这个来进行自动生成代码,希望有深入研究的网友进行分享这里代码生成的机制
内容概要:本文详细介绍了如何使用STM32微控制器精确控制步进电机,涵盖了从原理到代码实现的全过程。首先,解释了步进电机的工作原理,包括定子、转子的构造及其通过脉冲信号控制转动的方式。接着,介绍了STM32的基本原理及其通过GPIO端口输出控制信号,配合驱动器芯片放大信号以驱动电机运转的方法。文中还详细描述了硬件搭建步骤,包括所需硬件的选择与连接方法。随后提供了基础控制代码示例,演示了如何通过定义控制引脚、编写延时函数和控制电机转动函数来实现步进电机的基本控制。最后,探讨了进阶优化技术,如定时器中断控制、S形或梯形加减速曲线、微步控制及DMA传输等,以提升电机运行的平稳性和精度。 适合人群:具有嵌入式系统基础知识,特别是对STM32和步进电机有一定了解的研发人员和技术爱好者。 使用场景及目标:①学习步进电机与STM32的工作原理及二者结合的具体实现方法;②掌握硬件连接技巧,确保各组件间正确通信;③理解并实践基础控制代码,实现步进电机的基本控制;④通过进阶优化技术的应用,提高电机控制性能,实现更精细和平稳的运动控制。 阅读建议:本文不仅提供了详细的理论讲解,还附带了完整的代码示例,建议读者在学习过程中动手实践,结合实际硬件进行调试,以便更好地理解和掌握步进电机的控制原理和技术细节。同时,对于进阶优化部分,可根据自身需求选择性学习,逐步提升对复杂控制系统的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值