在 NVelocity 模板中如何测试属性是否存在

发布于 2024-09-06 16:19:23 字数 575 浏览 4 评论 0原文

我正在构建一个简单的 NVelocity 模板,但我不知道如何测试变量是否存在 - 在这个示例中,我想测试上下文是否包含名为 User 的属性。

我知道我可以实现与黑客 foreach 循环相同的功能,但我想知道是否有更好的方法。

Velocity.Init();

VelocityContext context = new VelocityContext();
context.Put("from", "somewhere");
context.Put("to", "someone");
context.Put("subject", "Welcome to NVelocity");


String s = @"From: $from To: $to Subject: 
#if($context.ContainsKey('User'))
    We Have a User
#else
    No User Found
#end";

var sw = new System.IO.StringWriter();
Velocity.Evaluate(context, sw, "", s);

string merged = sw.ToString();

I'm building a simple NVelocity template but I can't figure out how to test for the existence of a variable -- In this example I want to test if the context contains a property callwed User.

I know I can implement the same functionality as a hacked foreach loop but I was wondering if there's a better way.

Velocity.Init();

VelocityContext context = new VelocityContext();
context.Put("from", "somewhere");
context.Put("to", "someone");
context.Put("subject", "Welcome to NVelocity");


String s = @"From: $from To: $to Subject: 
#if($context.ContainsKey('User'))
    We Have a User
#else
    No User Found
#end";

var sw = new System.IO.StringWriter();
Velocity.Evaluate(context, sw, "", s);

string merged = sw.ToString();

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨小沫ゞ 2024-09-13 16:19:23

上下文本身不是上下文的一部分,因此 $context 不起作用。您可以这样检查是否存在:

#if ($user)
  we have a user
#else
  no user found
#end

The context itself is not a part of the context, so $context doesn't work. You can check for presence like this:

#if ($user)
  we have a user
#else
  no user found
#end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文