제 9회 JCO 컨퍼런스...기대된다.

Posted 2008. 1. 29. 13:19
자바로 밥먹고 살면서도 제대로 관련 컨퍼런스 찾아다니지도 못하다 지난해 이맘때 갔었던 그 컨퍼런스
당시 엄청난 인기를 실감했었는데... 올해도 어김없이 찾아와 나를 기대케 한다.






스프링에서 제공하는 메일은 다양한 형태를 지원한다.
그중에 Velocity Engine을 이용하여 Template메일을 보낼수 있다.
SpringReference를 보면서 하나씩 세팅하면서 테스트 한 결과는 다음과 같다.

VelocityEngine에 대한 xml 세팅은 다음과 같다.
<bean id="velocityEngine"
  class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
  <property name="velocityProperties">
   <props>
    <prop key="resource.loader">class</prop>
    <prop key="class.resource.loader.class">
     org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
    </prop>
   </props>
  </property>
 </bean>

이렇게 선언된 velocityEngine은
<bean id="springMailSender"
  class="com.xxx.xxxx.mail.SpringMailSender" abstract="true">
  <property name="mailSender" ref="mailSender" />
  <property name="velocityEngine" ref="velocityEngine" />
 </bean>
으로 세팅하고...
본문내용은
String mailText = VelocityEngineUtils.mergeTemplateIntoString(
     velocityEngine, "com/xxx/mail/mailContent.vm",
     new HashMap());

을 이용하여 변환한 내용을 메일로 발송하는 것이다.

그런데 위의 방법은 *.vm 파일이 클래스 패스에 있어야만 파일을 찾아서 파싱할수 있다.
일반 파일로 바꾸기 위해서는 다음과 같이 변경해야 한다.
<property name="velocityProperties">
   <props>
    <prop key="resource.loader">file</prop>
    <prop key="file.resource.loader.class">org.apache.velocity.runtime.resource.loader.FileResourceLoader
    </prop>
    <prop key="file.resource.loader.path">${webapp.root}/WEB-INF/velocity</prop>
    <prop key="file.resource.loader.cache">false</prop>
   </props>
  </property>

그런데 위의 내용중에 ${webapp.root}가 있는데... 별도의 properties를 선언해서 webapp.root를 선언해야 한다. 음... 좀 거시기 하다... 귀찮기도 하고...

그래서 다시 찾아본 결과... (영어가 짧아서 자세히 읽어보지 않으면 잘 모르고 그냥 지나치곤 한다.)

<property name="resourceLoaderPath" value="WEB-INF/velocity"/>

이거 한줄이면 다 된다. ㅎㅎㅎ

암튼 짧은 영어라도 천천히 읽어보면 답이 보인다.





<HTML>
<HEAD>
<script type="text/javascript">
<!--
//추가
function addTR(tr_id) {
   
    var id = document.getElementById(tr_id);
    var len = id.rows.length;
    var newRow = id.insertRow(len-1);
    var td0 = newRow.insertCell(0);
    var td1 = newRow.insertCell(1);
    var td2 = newRow.insertCell(2);
    td0.innerHTML = (len+1)+"번째 tr ";
    td1.innerHTML = " new cell 2 ";
    td2.innerHTML = " new cell 3 ";
}
//삭제
function delTR(tr_id) {
    var id = document.getElementById(tr_id);  
    var len = id.rows.length;
    id.deleteRow(1));
}
//-->
</script>
</HEAD>
<BODY>
<form name='f'>
<input type="button" value="ADD" onclick="addTR('dynamicTR');" />
<input type="button" value="DEL" onclick="delTR('dynamicTR');" />
<TABLE id="dynamicTR" border="1">
<TR>
 <TD>asdfasdf</TD>
 <TD>asdf</TD>
 <TD>asdfasdf</TD>
</TR>
</TABLE>
</form>
</BODY>
</HTML>


« PREV : 1 : ··· : 46 : 47 : 48 : 49 : 50 : 51 : 52 : ··· : 61 : NEXT »