Создание и запуск скорости, генерирующей HTML

0

Я очень новичок в использовании Velocity. Я пытаюсь использовать его для создания HTML-формы. Я работаю в Eclipse. Следующие jars находятся в моем пути к классам:

velocity-dep-1.5.jar
commons-collections.jar
commons-lang.jar
log4j-1.2.8.jar
ant.jar

Я использую файл сборки муравьев для создания моего проекта, но я не вижу, как генерируется HTML. Есть ли что-то, что мне не хватает, чтобы заставить его фактически генерировать HTML файл? Обучающее руководство, которое я выполнял, имеет только два файла, на которых я основывался. Это работало для автора, но, возможно, есть что-то еще, что я не понимаю, что новичок в использовании скорости. Я включил свой код и скрипт сборки, чтобы было легче увидеть, не хватает ли я чего-то. Большое спасибо!

У меня есть шаблон кода для моей формы здесь (form.vm):

<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 $radioList)
            #formRowRadio("method" $method "true" $selected)<br/>
        #end
    </table>
    <table>
        #foreach($map in $textList)
            #formRowText($label $label $value)
        #end
        <tr><td>&nbsp;</td><td><input type="submit" name="submit" value="submit"></td></tr>
    </table>

</form>

</body>
</html>

Вот код Java, с которым я должен согласиться (formDemo.java)

import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.Template;

public class formDemo {
    public static void main ( String[] args )
        throws Exception {

        Velocity.init();

        ArrayList radioList = new ArrayList();
        Map map = new HashMap();
        map.put("method", "Yes");
        map.put("selected", false);
        radioList.add(map);

        map = new HashMap();
        map.put("method", "No");
        map.put("selected", false);
        radioList.add(map);

        /* 
         * add the list to a VelocityContext
         */
        VelocityContext context = new VelocityContext();
        context.put("radios", radioList);

        ArrayList textList = new ArrayList();
        map = new HashMap();
        map.put("label", "FirstName");
        map.put("value", "");
        textList.add(map);

        map = new HashMap();
        map.put("label", "LastName");
        map.put("value", "");
        textList.add(map);

        context.put("textfields", textList);
        Template template = Velocity.getTemplate("form.vm");
        StringWriter writer = new StringWriter();
        template.merge(context, writer);
    }
 }

Сценарий сборки (build.xml)

<?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>
Теги:
ant
velocity

4 ответа

0
Лучший ответ

Если вы просто хотите, чтобы html был сгенерирован, вам придется распечатать значение StringWriter или записать его в файл.

В настоящее время, если код отсутствует, вы просто заполняете буфер.

    Template template = Velocity.getTemplate("form.vm");
    StringWriter writer = new StringWriter();
    template.merge(context, writer);

template.merge(context, writer) просто отображает шаблон в объект StringWriter.

  • 0
    Хорошо, это имеет смысл. Я изменил последний бит formDemo.java на это, но я не вижу файл .html ни в одном из моих каталогов после сборки. context.put("textfields", textList); Template template = Velocity.getTemplate("form.vm"); FileWriter fwriter = new FileWriter("form.html"); StringWriter writer = new StringWriter(); template.merge(context, writer); fwriter.write(writer.toString()); fwriter.close();
  • 0
    извините, у меня проблемы с форматированием ...
Показать ещё 2 комментария
0

Я думаю, что ваш шаблон должен быть следующим:

<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>

И вам также нужно эффективно печатать StringWriter в File.html.

0

В коде, который вы опубликовали: есть 2 способа запуска скорости:

  • (но это не то, что вы делаете, когда строите проект)
  • работает ant form, но так как вы не заполнить любой контекст, скорость: скорость не сможет заменить переменную в шаблоне (т.е. сгенерированный HTML будет не содержит динамические данные)

Я не уверен, что вам нужно:

Используется ли скорость во время сборки? В этом случае вам нужно запустить ant form а затем ant run (или добавить форму depend = "в comp target). Но вы также должны предоставить скоростной контекст скорости в файле build.xml

Если вам нужно запустить скорость во время выполнения: просто используйте автору файла, чтобы выполнить слияние скорости.

0

Похоже, ваш скрипт сборки фактически не выполняет код Java.

Попробуйте использовать java ant task, см. Здесь:

Задача Ant Java

Ещё вопросы

Сообщество Overcoder
Наверх
Меню