你能从视图页面调用类方法吗?
特别是未传递到视图中的那些?
在asp.net MVC中,我可以这样做:
<%= SomeClass.FixDateFormat(ViewData.Model.SomeClass.DateCreated) %>
Run Code Online (Sandbox Code Playgroud) 我构建了一个在我的localhost(tomcat)中完美运行的webapp.但是当我尝试部署时,在init()中速度崩溃,让我在这里留下这个奇怪的堆栈跟踪(抱歉大小):
ERROR [main] (VelocityConfigurator.java:62) - Error initializing Velocity!
org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.Log4JLogChute with the current runtime configuration.
at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:206)
at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:255)
at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:795)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)
at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:589)
at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:229)
at org.apache.velocity.app.Velocity.init(Velocity.java:107)
at com.webcodei.velociraptor.velocity.VelocityConfigurator.initVelocity(VelocityConfigurator.java:57)
at com.webcodei.velociraptor.velocity.VelocityConfigurator.configure(VelocityConfigurator.java:42)
at com.webcodei.velociraptor.VelociListener.contextInitialized(VelociListener.java:26)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3827)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4336)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:761)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:741)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:626)
at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:553)
at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:488)
at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1138)
at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:120)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1023)
at org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015)
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443)
at org.apache.catalina.core.StandardService.start(StandardService.java:448)
at org.apache.catalina.core.StandardServer.start(StandardServer.java:710)
at org.apache.catalina.startup.Catalina.start(Catalina.java:552)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) …
Run Code Online (Sandbox Code Playgroud) 我需要在Web应用程序中使用来自Java代码的Velocity(我将其用作邮件模板处理器).
所以,我有一个标准代码:
VelocityEngine ve = new VelocityEngine ();
try {
ve.init ();
Template t = ve.getTemplate (templatePath);
...
} catch (Exception e) {
throw new MailingException (e);
}
Run Code Online (Sandbox Code Playgroud)
这段代码总是抛出ResourceNotFoundException
.我应该将模板放在web应用程序(WEB-INF?classpath?etc?)中,我应该如何指定路径(即我应该传递什么templatePath
)?
出了点问题,非常令人沮丧.我在velocity的主页上看到,当我运行webapp时,应该设置一些属性.而且我已经做到了,但无论我做什么,我都会遇到同样的错误.
这是我设置道具和使用速度的地方
public class ConfirmationMailGenerator implements MailGenerator {
private BasicUser user;
private String htmlTemplate = "HTMLConfirmationMailTemplate.vsl";
private String plainTemplate = "PlainConfirmationMailTemplate.vsl";
public ConfirmationMailGenerator(BasicUser user) {
this.user = user;
}
public StringWriter generateHTML() throws Exception {
Properties props = new Properties();
props.setProperty("resource.loader", "wepapp");
props.setProperty("webapp.resource.loader.class", "org.apache.velocity.tools.view.WebappResourceLoader");
props.setProperty("webapp.resource.loader.path", "/WEB-INF/mailtemplates/");
VelocityEngine engine = new VelocityEngine(props);
VelocityContext context = new VelocityContext();
engine.init();
Map map = createDataModel();
context.put("user", map);
Template template = engine.getTemplate(htmlTemplate);
StringWriter writer = new StringWriter();
template.merge(context, writer);
return writer;
}
...
}
Run Code Online (Sandbox Code Playgroud)
这些文件当然保存在/ …
我正在使用速度1.7并在foreach循环中我想打印计数.在模板中,我在#foreach/#end部分中有以下字符串:
Count: $foreach.count
Run Code Online (Sandbox Code Playgroud)
并期望在渲染结果中看到类似的东西
Count: 1
...
Count: 2
...
Run Code Online (Sandbox Code Playgroud)
但我所看到的只是:
Count: $foreach.count
...
Count: $foreach.count
...
Run Code Online (Sandbox Code Playgroud)
有什么想法我做错了什么?
我希望标题本身很清楚,我正在使用分步法,有限差分公式(Navier-Stokes原始变量形式)解决2D盖子驱动腔(方域)问题,我得到了u和v的速度分量.整个领域,没有手动计算流线,是否有一个命令或绘图工具为我做的工作?
我希望这个问题与编程有关,因为我需要一个绘制流线图的工具而不需要明确地计算它们.
我在流 - 涡度NS形式中解决了同样的问题,我只需要采用流函数的等高线图来获得流线型.
我希望工具或绘图仪是一个python库,并且更多可以在fedora中安装(我可以妥协并使用薄荷)而不用大惊小怪!
如果有人指出图书馆和相关命令(会节省很多时间),我将不胜感激
我正在处理一些Java代码,其中Velocity 1.7设置为通过ClasspathResourceLoader检索模板.下面是代码的精简样本.它来自在Jetty服务器上运行的Tapestry Web应用程序.
Java类,模板和要包含的文件都在同一个文件夹"testpackage"中,因此在生成的JAR中它们都在同一个包"testpackage"中.
问题是,如果模板包含
#include("MyInclude.vm")
Run Code Online (Sandbox Code Playgroud)
指令,Velocity找不到"MyInclude.vm",它抛出一个ResourceNotFoundException.
因为在getTemplate的参数中我必须将包名称添加到模板名称,我还尝试在模板内的#include中执行相同的操作:
#include("testpackage/MyInclude.vm")
Run Code Online (Sandbox Code Playgroud)
但唯一的区别是后者可以运行,如果我从Eclipse运行Web应用程序,而前者甚至不能从Eclipse工作.如果我构建,部署JAR并从部署中运行Web应用程序,则两种语法都会失败并出现相同的ResourceNotFoundException.
http://velocity.apache.org/engine/releases/velocity-1.7/user-guide.html#Include上的Velocity文档说:
"出于安全原因,要包含的文件可能只在TEMPLATE_ROOT下"
这肯定可能是我的问题的原因,但我还没有找到任何关于TEMPLATE_ROOT实际上是什么的进一步信息.
这听起来很像环境变量,但我不知道应该将它设置为什么,因为我使用的是ClasspathResourceLoader,并且要包含的文件不是位于文件夹中的实际文件,它位于JAR内部包含模板和Java类(以及所有在同一个包中).
我在另一个问题中找到了TEMPLATE_ROOT,我应该在哪里为使用Maven构建的命令行实用程序放置Velocity模板文件?,但它与使用FileResourceLoader有关.我需要继续使用ClasspathResourceLoader,我需要所有文件都在JAR中,而不是像某些文件夹中的普通文件一样.
package testpackage;
import java.io.StringWriter;
import java.util.Properties;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class TestVelocity
{
public static String getText()
{
String text = "";
Properties properties = new Properties();
properties.setProperty("resource.loader", "class");
properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
VelocityEngine engine = new VelocityEngine();
VelocityContext context = new VelocityContext();
StringWriter writer = new StringWriter();
try
{
engine.init(properties);
// This works because the template doesn't contain any …
Run Code Online (Sandbox Code Playgroud) 是否可以从Velocity模板访问常量值(即Java类中定义的公共静态最终变量)?
我希望能够写出这样的东西:
#if ($a lt Long.MAX_VALUE)
Run Code Online (Sandbox Code Playgroud)
但这显然不是正确的语法.
我有以下段来从速度模板文件中渲染.
xyz $$foo
Run Code Online (Sandbox Code Playgroud)
美元符号需要从VTL解析器中转义.在模板文件中,我将其表示为
xyz \$\$foo
Run Code Online (Sandbox Code Playgroud)
我预计
xyz $$foo
Run Code Online (Sandbox Code Playgroud)
但我明白了
xyz \$foo
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么??
我想加载一个模板word文档来添加内容并保存为新文档.我正在研究.doc文件.
经过长时间的研究,我只找到了docx的解决方案:
http://www.smartjava.org/content/create-complex-word-docx-documents-programatically-docx4j
http://www.sambhashanam.com/mail-merge-in-java-for-microsoft-word-document-part-i/
所以我想替换以这种格式编写的任何变量:$VAR
它的值.我可以用velocity或Apache-poi来做,它的最佳解决方案是什么.任何帮助将不胜感激.
velocity ×10
java ×9
apache-poi ×1
log4j ×1
matplotlib ×1
numpy ×1
python ×1
scipy ×1
servlets ×1
stack-trace ×1
templates ×1