0

だから私はベロシティを始めたばかりで、小さくて簡単な実験でそれを理解しようとしています. ファイルからテンプレートを直接ロードすると、何かが失敗することが判明したため、代わりに StringResourceLoader を介して取得しました。

servletContext = ServletActionContext.getServletContext();

//Set up Velocity
VelocityEngine ve = new VelocityEngine();
ve.setProperty ("runtime.log.logsystem.class", "org.apache.velocity.runtime.log.NullLogSystem");
ve.setProperty ("resource.loader", "string");
ve.setProperty ("string.resource.loader.class", "org.apache.velocity.runtime.resource.loader.StringResourceLoader");
ve.init();

//get a template
StringResourceRepository repo = StringResourceLoader.getRepository();
String templateName = "documentReminder";
String templateContent = getTemplateContent(); //fetches a string from a file
repo.putStringResource(templateName, templateContent); //the resource.loader = string makes this work
Template template = ve.getTemplate(templateName);

//add data to context
VelocityContext vContext = new VelocityContext();
vContext.put("name", "Bob");

//render template into a Stringwriter and spit it out to screen
StringWriter writer = new StringWriter();
template.merge(vContext, writer);
PrintWriter out = response.getWriter();
out.print(writer.toString());

テンプレートは素晴らしくシンプルです。

<h1>Hi $name</h1>

ログから次のことを掘り出しました。

DEBUG velocity:155 - Null reference [template 'documentReminder', line 9, column 16] : $name cannot be resolved.

これでテンプレートがうまく取得されますが、名前を挿入せずに変更されずに吐き出されます。誰か提案はありますか?

4

1 に答える 1