网似乎充满了Velocity和FreeMarker之间的比较,它们似乎相当合理.但似乎几乎没有StringTemplate和FreeMarker之间的比较!
那么,StringTemplate和FreeMarker之间的主要区别是什么?
我对它们的用法是仅生成HTML页面.在这两个中,我会期望FreeMarker更合适,更有能力,因为这似乎更常见 - 但通过快速浏览一下,看起来StringTemplate实际上有更合适的功能!
如果使用过两者的人都有时间发表评论会很棒 - 对于实际细节,我可以并排阅读文档,但我想要开始使用.
我正在发送一封电子邮件,但我正确地收到了该邮件,但该主题的编码不正确.我发送"invitación"但我收到"invitaci?n".消息内容正常.
当主题在String变量中设置时,消息的内容来自Velocity Template的转换.
我已经google了,我看到有人说MimeUtility.encodeText()可以解决问题,但我没有成功.
我该如何解决这个问题?这是我到目前为止的代码.
String subject = "Invitación";
String msgBody = VelocityEngineUtils.mergeTemplateIntoString(velocityEngine, "/vmTemplates/template.vm", "UTF-8", model);
Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);
try {
String encodingOptions = "text/html; charset=UTF-8";
Message msg = new MimeMessage(session);
msg.setHeader("Content-Type", encodingOptions);
msg.setFrom(new javax.mail.internet.InternetAddress(emailFrom));
msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
msg.setSubject(subject);
msg.setContent(msgBody, encodingOptions);
Transport.send(msg);
} catch (AddressException e) {
...
} catch (MessagingException e) {
...
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我经常遇到字符串值不存在和/或为空的情况.这是测试这种情况的最佳方法吗?
#if( $incentive.disclaimer && $!incentive.disclaimer != '' )
$incentive.disclaimer
#end
Run Code Online (Sandbox Code Playgroud) 在速度我有一个变量,其值为null.在这种情况下,我不想显示任何内容.
目前模板引擎将""转换为null,所以我必须这样做.
#set ( $a = "")
#if ($a)
assert("never prints a neither gets here: " + $a)
#end
Run Code Online (Sandbox Code Playgroud)
有没有办法直接做到这一点?我希望能够做出类似的事情:
This is the variable $a. ## in case that $a is null i don't want 'dollar a' to be displayed
Run Code Online (Sandbox Code Playgroud) 我是一名java开发人员,没有经验丰富,但我对大多数概念都很熟悉.
我最近使用Tomcat/JSP(~30个动态页面)构建了一个网站.我犯了新的错误,在JSP中包含大部分核心逻辑,使用合理化,它只是"一个简单的项目".
我学到了很多困难.因此,我现在使用servlet在谷歌应用引擎中重新构建应用程序,并计划使用Velocity使用模型 - 视图 - 控制器设计模式实现它.
我也在看Struts,但之前没有使用过这个框架.
有人能说服我为什么要将struts纳入这个项目吗?对于一两个人的中型项目,真的会给我买很多东西吗?
在有额外学习曲线的情况下,有一个明显的成本,它的好处是否会超过成本?或者Velocity的使用是否足以隔离逻辑?意见?
我有一个Java数组,如:
String[] arr = new String[] {"123","doc","projectReport.doc"};
Run Code Online (Sandbox Code Playgroud)
在我看来,访问的自然方式是:
#set($att_id = $arr[0])
#set($att_type = $arr[1])
#set($att_name = $arr[2])
Run Code Online (Sandbox Code Playgroud)
但它没有用.我已经采用了这种解决方法.但是对于这么简单的任务来说,它的代码太多了.
#set($counter = 0)
#foreach($el in $arr)
#if($counter==0)
#set($att_id = $el)
#elseif($counter==1)
#set($att_type = $el)
#elseif($counter==2)
#set($att_name = $el)
#end
#set($counter = $counter + 1)
#end
Run Code Online (Sandbox Code Playgroud)
还有其他方法吗?
是否可以通过FHN在代码中配置L2缓存提供程序?
在以下配置中添加一行是我所追求的:
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(c => c.FromConnectionStringWithKey("Temp")).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<IMap>())
.ExposeConfiguration(c => { })
.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
干杯
AWC
我只是用google搜索'for loop',但看起来速度只有'foreach'.
如何在力度模板中使用"for loop"?
我试图在Freemarker和Velocity之间作为模板引擎来决定你看到的每个优点/缺点?
我应该考虑的任何替代方案?
velocity ×10
java ×7
freemarker ×2
templates ×2
caching ×1
comparison ×1
encoding ×1
iteration ×1
jakarta-mail ×1
jsp ×1
loops ×1
struts2 ×1