我有一个程序,目前有大量的代码,我想设计。此代码采用许多文本文件,并通过一个有趣的书面解释器传递它,以生成一个纯文本文件报告,该报告可以转发到其他系统。在 theory 中,这允许非程序员能够修改报告,而无需理解Java和解释器的内部工作原理。在实践中,任何微小的改变都可能需要进入解释器并进行调整(并且特定于域的语言对其他程序员来说也不是很友好)。
我很乐意重新设计此代码。作为一个主要的网络程序员,当想到“非程序员能够修改报告......”时,首先想到的是我用网页替换报告并对自己说“啊哈!Jsp。”对于人们以及taglib和java scriptlet(尽管可能是后者可能不合适)而不是笨拙编写的DSL语句,这将给我一个很好的所见即所得你的方法。
虽然可以使用jspc
将jsp编译成java(应用程序的另一部分在jboss服务器上运行ejbs,因此jspc
并不太远),但是样板代码是它使用try来将输出连接到来自servletcontext的pagecontext。这将涉及欺骗代码,使其认为它在Web容器内运行(不是不可能,而是一个kluge),然后删除标题。
是否有可用于打印到文本文件的java的不同模板方法(或库)?到目前为止,我所看到的每一个似乎都针对网络进行了优化,或者与特定的应用服务器紧密耦合(并专为网络工作而设计)。
答案 0 :(得分:3)
尝试Apache Velocity。它非常简单,并且不会假设它在Web应用程序的上下文中运行。
这是完全主观的,但我认为它的语法对于非程序员来说比JSP和标记库更容易理解。
答案 1 :(得分:3)
答案 2 :(得分:1)
如果你想成为公司真正的踩踏器,你可以创建一个Grails应用程序来实现它并使用Groovy模板(可能与Quartz插件一起用于调度),它可能有点难以出售如果有很多现有的代码要替换,但我喜欢它......
http://groovy.codehaus.org/Groovy+Templates
如果你想要安全投注,那么(也是优秀的)Velocity必须是它:
答案 3 :(得分:1)
可能你想检查Rythm template engine,具有良好的性能(比速度快2到3倍)和优雅的语法(.net Razor之类),专门为Java程序员设计。
模板,从用户列表中生成一个用“,”分隔的用户名字符串
@args List<User> users
@for (User user: users) {
@user.getName() @user_sep
}
模板:if-else演示
@args User user
@if (user.isAdmin()) {
<div id="admin-panel">...</div>
} else {
<div id="user-panel">...</div>
}
使用模板文件调用模板
// pass render args by name
Map<String, Object> renderArgs = ...
String s = Rythm.render("/path/to/my/template.txt", renderArgs);
// or pass render arguments by position
String s = Rythm.render("/path/to/my/template.txt", "arg1", 2, true, ...);
使用内嵌文字调用模板
User user = ...;
String s = Rythm.render("@args User user;Hello @user.getName()", user);
使用字符串插值模式调用模板
User user = ...;
String s = Rythm.render("Hello @name", user.getName());
ToString模式
public class Address {
public String unitNo;
public String streetNo;
...
public String toString() {
return Rythm.toString("@_.unitNo @_.streetNo @_.street, @_.suburb, @_.state, @_.postCode", this);
}
}
自动ToString模式(遵循apache commons lang的reflectionToStringBuilder,但速度比它快)
public class Address {
public String unitNo;
public String streetNo;
...
public String toString() {
return Rythm.toString(this);
}
}
可以在http://www.playframework.org/modules/rythm找到文件。在GAE上运行的完整演示应用:http://play-rythm-demo.appspot.com。
注意,demo和doc是为Play!Framework的play-rythm插件创建的,但大多数内容也适用于纯粹的rythm模板引擎。
源代码: