2017-01-16 2 views
1

속도 템플릿, 템플릿과 POJO를 텍스트로 병합하는 방법이 있습니다. 나는 디버거를 체크인했고 모든 데이터는 모든 곳에서 적절히 채워져있다. 내 문제는 속도가 하나의 필드 (queueName) 만 얻을 수 있지만 나머지는 그렇지 않다는 것입니다. 왜 그런가요?속도가 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 

템플릿을 변경하여 문제를 해결했습니다. 어떻게 든 느슨한 맥락 어딘가에 깊이있는 수준의 HTML 트리. 이유를 모르겠다.

답변

-1

속도는 비공개 필드를 읽을 수 없습니다. 공개 게터를 추가해야합니다.

+0

롬복을 사용하고 있습니다. 데이터 주석은 public getter를 생성합니다. – Piotrowy

+0

어디에서 귀하의 질문에 언급 했습니까?! 나는 downvote를받을 가치가있는 것처럼 느껴지지 않는다. –

+0

Java 도구에 관해 이야기하고 싶다면 lombok을 알아야합니다. 그것은 pojo 클래스에서 언급된다. 나는이 투표를 취소 할 수 있지만 다음에 그것을 기억해야합니다. – Piotrowy

관련 문제