2017-01-16 18 views
1

私は速度テンプレート、テンプレートとPOJOをテキストにマージするいくつかのメソッドを持っています。私はデバッガをチェックインし、すべてのデータがどこにでも正しく埋められています。私の問題は、速度は1つのフィールド(queueName)しか取得できないが、残りのフィールドは取得できないということです。何故ですか?Velocityはpojoからフィールドを取得できません

テンプレート:これは、マージ私の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(); 
    } 

であり、これは結果である

<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> 

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 

私はテンプレートを変更することで、私の問題を解決しました。 Velocityは何とかHTMLツリーの深いレベルのどこかの緩やかなコンテキストです。理由を知らない。

答えて

-1

Velocityはプライベートフィールドを読み取ることができません。パブリックゲッターを追加する必要があります。

+0

ロンボクを使用しています。データアノテーションはパブリックゲッターを生成します。 – Piotrowy

+0

あなたはどこであなたの質問に言及しましたか?私はダウンボートに値するような気がしません。 –

+0

Javaツールについて話したいなら、lombokを知っておくべきです。それはpojoクラスで言及されています。私はこの投票を元に戻すことができますが、次回はそれを覚えておく必要があります。 – Piotrowy

関連する問題