gpt4 book ai didi

java - Velocity 无法从 pojo 检索字段

转载 作者:行者123 更新时间:2023-12-02 05:47:56 25 4
gpt4 key购买 nike

我有速度模板,一些将模板和 POJO 合并到文本中的方法。我检查了调试器,所有数据都已正确填充。我的问题是速度只能获得一个字段(queueName),但其余的则不能。这是为什么?

模板:

<html>
<body>
<h3>Environment: ${environment}</h3>

<div>
#if ($monitoredQueues.size() > 0)
<table>
#foreach( $monitoredQueue in $monitoredQueues )
#set( $queueName = ${monitoredQueue.QueueName})
#set( $crMsgCount = ${monitoredQueue.CurrentMessagesCount})
#set( $prMsgCount = ${monitoredQueue.PreviousMessagesCount})
#set( $prCheckTime = ${monitoredQueue.PreviousCheckTime})
#set( $prEmailTime = ${monitoredQueue.PreviousEmailSentTime})
<tr>
<td>
<table>
<tr>
<td>
<p>Queue name: ${queueName}</p>
</td>
</tr>
<tr>
<td>
<p>Current messages count: ${crMsgCount}</p>
</td>
</tr>
<tr>
<td>
<p>Previous messages count: $!{prMsgCount}</p>
</td>
</tr>
<tr>
<td>
<p>Previous check time: $!{prCheckTime}</p>
</td>
</tr>
<tr>
<td>
<p>Previous email sent time: $!{prEmailTime}</p>
</td>
</tr>
</table>
</td>
</tr>
#end
</table>
#end
</div>
</body>
</html>

这是我的 POJO

@Data //lombok annotation generates getters, setters, hash and equals
@Builder //lombok annotation generates builder
@NoArgsConstructor
@AllArgsConstructor
public class MonitoredQueue {

private Integer id;
private String queueName;
private Integer currentMessageCount;
private Integer previousMessageCount;
private LocalDateTime previousCheckDate;
private LocalDateTime previousEmailSentDate;
private String createdBy;
private LocalDateTime creationDate;
private String modifiedBy;
private LocalDateTime modificationDate;
}

合并方法

public String mergeTemplateIntoEmailText(List<MonitoredQueue> monitoredQueues, String environment) {
velocityEngine.init();
Template mailTemplate = velocityEngine.getTemplate(EMAIL_TEMPLATE);
VelocityContext velocityContext = new VelocityContext();
velocityContext.put(ENVIRONMENT, environment);
velocityContext.put(MONITORED_QUEUE, monitoredQueues);
StringWriter writer = new StringWriter();
mailTemplate.merge(velocityContext, writer);
return writer.toString();
}

这就是结果:

Environment: test

Queue name: XXXX Current messages count: $crMsgCount Previous messages count: $prMsgCount Previous check time: $prCheckTime Previous email sent time: $prEmailTime

我通过更改模板解决了我的问题。 Velocity 以某种方式松散了 html 树深层某处的上下文。不知道为什么。

最佳答案

确保您的 POJO 类是公共(public)。如果您的 POJO 不是公开的:

@Data
@AllArgsConstructor
class Foo {
private String bar;
private String baz;
}

然后:

Foo foo = new Foo();
foo.setBar("lorem");
foo.setBaz("ipsum");

Template template = VELOCITY_ENGINE.getTemplate("/templates/sample.vm", UTF_8.name());
VelocityContext context = new VelocityContext(ImmutableMap.<String, Object>of("foo", foo));
StringWriter writer = new StringWriter();
template.merge(context, writer);

不会用 loremipsum< 替换 ${foo.bar}${foo.baz} 的值 分别。

一旦我将 Foo 设为 public 类,Velocity 就可以毫无问题地呈现其属性。

关于java - Velocity 无法从 pojo 检索字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41676003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com