2017-01-16 29 views
1

我有速度模板,一些將模板和POJO合併到文本中的方法。我檢查了調試器,所有數據都在正確的位置填充。我的問題是速度只能得到一個字段(queueName),但其餘的不能。這是爲什麼?速度不能從pojo retreive字段

模板:

<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: Janton.Oksa.V1:RessuItemCreatedOrUpdated Current messages count: $crMsgCount Previous messages count: $prMsgCount Previous check time: $prCheckTime Previous email sent time: $prEmailTime 

我通過更改模板解決了我的問題。速度某種程度上鬆散的上下文深層html樹的上下文。不知道爲什麼。

回答

-1

Velocity無法讀取專用字段。你需要添加公共獲得者。

+0

我正在使用lombok。數據註釋生成公共getter。 – Piotrowy

+0

你在哪裏提到你的問題?我覺得不值得讚揚。 –

+0

如果你想談論Java工具,你應該知道龍目島。它在pojo類中被提及。我可以撤消這次投票,但下次你應該記住它。 – Piotrowy