'Velocity'에 해당되는 글 1건

  1. 2008.07.29 Velocity에서 tiles 파일 불러오는 거 안될 때

타일즈에서 extends가 이상하게 안될때는..

toolbox.xml 에 있는 노드의 경로들이 제대로 잘 박혀 있는지 확인해보자.
기본 default tool들은 괜찮은데, 보통 커스텀으로 박아넣은것들에서 오타가
날 확률이 많으니 조심하자.



삽펐던 사연은 아래 자세히..















=============================================================================


어제 타일즈 삽 펀 사연..



스프링이 대새인데.. 스트러츠로 그냥 하던대로 프로젝트 빌딩을 하고 있었다.

다 하고 나니 이상하게

tiles-defs.xml 에 설정한것과 다르게 동작을 했다.


빌딩과정..
struts-config.xml 에 타일즈 설정을 했고..
<plug-in className="org.apache.struts.tiles.TilesPlugin">
  <set-property property="definitions-config" value="/WEB-INF/tiles-defs.xml, /WEB-INF/tiles-defs-info.xml" />
  <set-property property="definitions-parser-validate" value="true" />
  <set-property property="moduleAware" value="true" />
 </plug-in>

라고 정상적으로 설정을 했고..




벨로시티로 타일즈를 구성한곳에 박아야 하니..
velocity.properties 에도 정상적으로 잘 등록을 했고..

velocimacro.library = VM_global_library.vm
velocimacro.permissions.allow.inline = true
velocimacro.permissions.allow.inline.to.replace.global = false
velocimacro.permissions.allow.inline.local.scope = false 
velocimacro.context.localscope = false

resource.loader = webapp

webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path = /WEB-INF/template/
webapp.resource.loader.cache = false
webapp.resource.loader.modificationCheckInterval = 60

input.encoding=UTF-8
output.encoding=UTF-8
default.contentType=text/html;charset=utf-8

directive.foreach.counter.name = velocityCount
directive.foreach.counter.initial.value = 1




web.xml 에도 vm파일을 사용할 수 있도록 정상적으로 등록을 하고..
<servlet>
  <servlet-name>velocity</servlet-name>
  <servlet-class>
   org.apache.velocity.tools.view.servlet.VelocityViewServlet
  </servlet-class>
  <init-param>
   <param-name>org.apache.velocity.toolbox</param-name>
   <param-value>/WEB-INF/toolbox.xml</param-value>
  </init-param>
  <init-param>
   <param-name>org.apache.velocity.properties</param-name>
   <param-value>/WEB-INF/velocity.properties</param-value>
  </init-param>
  <load-on-startup>10</load-on-startup>
 </servlet>

<servlet-mapping>
  <servlet-name>velocity</servlet-name>
  <url-pattern>*.vm</url-pattern>
 </servlet-mapping>



toolbox.xml 에도 잘 설정을 한듯했다..


그런데 어쩐지 tiles-defs.xml 과 tiles-defs-info.xml 요렇게 2개로 갈라서
처리하려고 했는데..

 tiles-defs.xml
<tiles-definitions>

 <!-- 1단 레이어  -->
 <definition name="layout_onecolumn.tiles" path="/layout/layout_onecolumn.vm">
  <put name="tab" value="/layout/top_tab.vm" />
  <put name="bottom" value="/layout/bottom.vm" />
 </definition>

 <!-- Blank 레이아웃 -->
 <definition name="layout_blank.tiles" path="/layout/layout_blank.vm" />
  <definition name="blank.tiles" path="/layout/blank2.vm" />

</tiles-definitions>




tiles-defs-info.xml
<tiles-definitions>

  <definition name="survey.top.tiles" extends="blank.tiles">
  <put name="content" value="/top/topContent.vm" />
 </definition>
 
 <definition name="survey.survey.tiles" extends="layout_onecolumn.tiles">
  <put name="content" value="/test/topContent.vm" />
 </definition>

</tiles-definitions>



이렇게 설정해서  blank.tiles를 extends 하려고 했는데.. extends를 하는 놈은
안중에도 없고, tils-defs.xml 에 있는 blank.tiles name을 가진 녀석의
/layout/blank2.vm 파일 내용만 보여지는것이다. extends 한녀석도 같이 박혀야
하는데..

그래서 vm파일을 옮겨도 보고, 바꿔도 보고.. 타일즈 문법이 틀렸는지 확인도 해보며
수십번 삽질하다가..

toolbox.xml 의 어떤 한 노드의 경로에 오타가 있단느것을 발견해서
경로를 제대로 잡아주니, extends 가 안되던 것이 에러가 해결됐다..
<!-- Struts -->
 <tool>
  <key>tiles</key>
  <scope>request</scope>
  <class>org.apache.velocity.tools.struts.TilesTool</class>
 </tool>
 
 
 <!-- Custom -->
 <tool>
  <key>strUtil</key>
  <scope>application</scope>
  <class>net.coader.util.velocity.StringUtilsTool</class>
 </tool>

class의 경로에 오타가 있다거나 틀리면 extends문제가 발생한다.
보통 사용자가 java를 통해 custom tool을 만들때 경로를 집어 넣다가 발생할 수 있는
에러 이다.


이건 뭐 차라리 아예 안되서 에러를 내든지 하면 첨부터 설정을 봤을텐데 말이다..
삽질한 내 시간을 돌려줘 ㅠ_ㅠ 


- 내 사수인 종민님 블로그에서 퍼온 것임 -

'개발 이야기 > 유용한 Coding' 카테고리의 다른 글

Java로 쉽게 메일 보내기 메소드 만들기  (0) 2008.11.17
Collections.sort 로 쉽게 소트하기  (0) 2008.11.17
ANT FTP 에러 해결하는 방법  (1) 2008.07.28
chat Server  (0) 2008.05.14
간단한 ChatClient  (0) 2008.05.14
Posted by 서오석
,