Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成HTML的构建和运行速度_Java_Html_Eclipse_Ant_Velocity - Fatal编程技术网

Java 生成HTML的构建和运行速度

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文件,我缺少了什么吗?我遵循的教程中只有两个文件是我基于我的文件编写的。这对作者来说是有效的,但也许我还没有意识到,对于

我对使用速度非常陌生。我试图用它来生成一个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,我是个新手。我已经包括了我的代码和构建脚本,以便更容易地查看我是否遗漏了什么。多谢各位

我这里有我的表单的模板代码(
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>&nbsp;</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(但这不是构建项目时要做的事情)
  • 运行
    ant表单
    ,但由于未填充任何velocity上下文:velocity将无法替换模板中的变量(即生成的html将不包含动态数据)
我不确定您需要什么:

它是否在构建时使用速度?在这种情况下,您必须先运行
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>&nbsp;</td><td><input type="submit" name="submit" value="submit"></td></tr>
    </table>

</form>

</body>
</html>