Java 生成HTML的构建和运行速度
我对使用速度非常陌生。我试图用它来生成一个HTML表单。我在Eclipse工作。我的类路径中有以下JAR:Java 生成HTML的构建和运行速度,java,html,eclipse,ant,velocity,Java,Html,Eclipse,Ant,Velocity,我对使用速度非常陌生。我试图用它来生成一个HTML表单。我在Eclipse工作。我的类路径中有以下JAR: velocity-dep-1.5.jar commons-collections.jar commons-lang.jar log4j-1.2.8.jar ant.jar 我正在运行一个ant构建文件来构建我的项目,但是我没有看到生成的HTML。为了让它真正生成HTML文件,我缺少了什么吗?我遵循的教程中只有两个文件是我基于我的文件编写的。这对作者来说是有效的,但也许我还没有意识到,对于
velocity-dep-1.5.jar
commons-collections.jar
commons-lang.jar
log4j-1.2.8.jar
ant.jar
我正在运行一个ant构建文件来构建我的项目,但是我没有看到生成的HTML。为了让它真正生成HTML文件,我缺少了什么吗?我遵循的教程中只有两个文件是我基于我的文件编写的。这对作者来说是有效的,但也许我还没有意识到,对于使用velocity,我是个新手。我已经包括了我的代码和构建脚本,以便更容易地查看我是否遗漏了什么。多谢各位
我这里有我的表单的模板代码(form.vm
):
构建脚本(Build.xml
)
如果您只想看到生成的html,则必须打印出StringWriter的值或将其写入文件 目前,除非代码丢失,否则您只需填充缓冲区
Template template = Velocity.getTemplate("form.vm");
StringWriter writer = new StringWriter();
template.merge(context, writer);
template.merge(context,writer)只是将模板呈现给StringWriter对象。我认为您的模板应该如下所示:
<html>
<head>
<title> My Form </title>
</head>
<body>
#if ($fieldErrors)
#foreach ($error in $fieldErrors)
$error<br>
#end
#end
#if ($actionErrors)
#foreach ($error in $actionErrors)
$error<br>
#end
#end
<form name="edit" action="edit.action" method="post">
<table>
<tr><td>Testing</td><td>123</td></tr>
#foreach($map in $radios)
#formRowRadio("method" $map.method "true" $map.selected)<br/>
#end
</table>
<table>
#foreach($map in $textfields)
#formRowText($map.label $map.label $map.value)
#end
<tr><td> </td><td><input type="submit" name="submit" value="submit"></td></tr>
</table>
</form>
</body>
</html>
我的表格
#如果($fieldErrors)
#foreach($fieldErrors中的error)
$error
#结束
#结束
#如果($actionErrors)
#foreach($actionErrors中的error)
$error
#结束
#结束
测试123
#foreach($map in$radios)
#formRowRadio(“方法”$map.method“true”$map.selected)
#结束
#foreach($textfields中的映射)
#formRowText($map.label$map.label$map.value)
#结束
您还需要有效地将StringWriter打印到一个文件.html。在您发布的代码中:有两种运行velocity的方法:
- 运行main(但这不是构建项目时要做的事情)
- 运行
,但由于未填充任何velocity上下文:velocity将无法替换模板中的变量(即生成的html将不包含动态数据)ant表单
ant form
,然后再运行ant
(或者在comp目标中添加dependens=“form”)。但您还必须在build.xml中为velocity提供velocity上下文
如果您需要在运行时运行velocity:只需使用文件编写器执行velocity合并。看起来您的构建脚本实际上并没有执行Java代码 尝试使用java ant任务,请参见此处:
好的,这是有道理的。我将formDemo.java的最后一部分更改为这个,但在构建之后,我在任何目录中都看不到.html文件<代码>上下文.put(“textfields”,textList)
Template-Template=Velocity.getTemplate(“form.vm”)
FileWriter fwriter=newfilewriter(“form.html”)代码>StringWriter编写器=新的StringWriter()代码>模板。合并(上下文、编写器)
fwriter.write(writer.toString())代码>fwriter.close()代码>事实上,我认为这是我的构建脚本的问题,而不是写入文件部分的问题。你能在java代码中放入一些日志或sysout语句来确认ant脚本实际上正在运行该类吗?更新:我从构建脚本中删除了目标
,并修改了目标
,以便只运行
<?xml version='1.0' encoding='UTF-8'?>
<project name="velocityTemplate" default="jar" basedir=".">
<property name='cls' location='${basedir}/classes'/>
<property name='dat' location='${basedir}/data'/>
<property name='gen' location='${basedir}/gen'/>
<property name='lib' location='${basedir}/lib'/>
<property name='src' location='${basedir}/src'/>
<property name='tmp' location='${basedir}/templates'/>
<path id='project.classpath'>
<pathelement location='${cls}'/>
<fileset dir='${lib}' includes='*.jar'/>
</path> <target name='clean' description='Clean.'>
<delete dir='${cls}'/>
<delete dir='${gen}'/>
</target>
<target name='comp' description='Compile the source.'>
<mkdir dir='${cls}'/>
<javac srcdir='${src}' destdir='${cls}' classpathref='project.classpath' fork='true'/>
</target>
<target name='jar' depends='comp' description='JAR the application.'>
<jar destfile='${ant.project.name}.jar' update='false' filesonly='true' index='true'>
<fileset dir='${cls}'/>
<fileset dir='${src}'/>
</jar>
</target>
<target name='run' depends='jar' description='Run the application.'>
<path id='velocityTemplate.classpath'>
<pathelement location='${ant.project.name}.jar'/>
<fileset dir='${lib}' includes='*.jar'/>
</path>
<taskdef classpathref='velocityTemplate.classpath'/>
<mkdir dir='${gen}'/>
<enumerator outputPath='${gen}' inputPath='${dat}' templateFile='${tmp}/form.vm'/>
</target>
<target name='form' description='Creates form'>
<path id='velocityTemplate.classpath'>
<pathelement location='${basedir}/velocityTemplate.jar'/>
<pathelement location='${lib}/velocity-dep-1.5.jar'/>
</path>
<taskdef classpathref='velocityTemplate.classpath'/>
<velocityTemplate outputPath='${basedir}/src' templateFile='${basedir}/form.vm'/>
</target>
</project>
Template template = Velocity.getTemplate("form.vm");
StringWriter writer = new StringWriter();
template.merge(context, writer);
<html>
<head>
<title> My Form </title>
</head>
<body>
#if ($fieldErrors)
#foreach ($error in $fieldErrors)
$error<br>
#end
#end
#if ($actionErrors)
#foreach ($error in $actionErrors)
$error<br>
#end
#end
<form name="edit" action="edit.action" method="post">
<table>
<tr><td>Testing</td><td>123</td></tr>
#foreach($map in $radios)
#formRowRadio("method" $map.method "true" $map.selected)<br/>
#end
</table>
<table>
#foreach($map in $textfields)
#formRowText($map.label $map.label $map.value)
#end
<tr><td> </td><td><input type="submit" name="submit" value="submit"></td></tr>
</table>
</form>
</body>
</html>