Tag Archives: 스프링

[Velocity] 스프링 프레임워크에서 사용하기

스프링에서는 벨로시티 뷰 템플릿 엔진(혹은 프레임워크)을 사용하기 쉽도록 하기 위해 따로 인터페이스 클래스를 제공하고 있다. 다음과 같은 설정만으로도 바로 벨로시티를 사용할 수 있다.

1. View Resolver
[code]<bean id=”viewResolver”
 class=”org.springframework.web.servlet.view.velocity.VelocityViewResolver”>
  <property name=”cache” value=”true”/>
  <property name=”prefix” value=”/WEB-INF/vm/”/>
  <property name=”suffix” value=”.vm”/>
  <property name=”contentType” value=”text/html; charset=UTF-8″/>
</bean>[/code]

위와 같이 ViewResolver를 설정하여 준다. 기존의 Resolver를 교체하여도 되고 여러개의 Resolver를 설정하여도 된다. 스프링이 알아서 알맞는 Resolver를 선택한다고 한다. Content Type을 강제적으로 설정하여 Response의 헤더에 실려가도록 설정할 수 있다.

2. Velocity Config
[code]<bean id=”velocityConfig”
 class=”org.springframework.web.servlet.view.velocity.VelocityConfigurer”>
  <property name=”resourceLoaderPath” value=”/WEB-INF/vm/”/>
  <property name=”velocityProperties”>
    <props>
      <prop key=”directive.foreach.counter.name”>loopCounter</prop>
      <prop key=”directive.foreach.counter.initial.value”>0</prop>
      <prop key=”input.encoding”>UTF-8</prop>
      <prop key=”output.encoding”>UTF-8</prop>
    </props>
  </property>
</bean>[/code]

resourceLoaderPath에는 VTL 페이지들이 모여있는 곳의 경로를 지정하여 주면 된다. 이런 보안적인 제제가 필요없다면 /로 설정을 하면 된다. 밑의 directive.foreach.counter.name설정은 foreach사용시에 현재 카운터를 참조할 수 있는 변수명을 가르킨다. foreach중 $loopCounter 를 찍어보면 현재의 카운터가 출력된다.

directive.foreach.counter.initial.value는 벨로시티의 foreach카운터 디폴트 시작값이 0이 아닌 1로 되어있다. 대부분의 프로그래밍은 제로베이스 이므로 0으로 바꾸어 준다. 밑의 인코딩 옵션은 사용하기 원하는 인코딩 설정으로 하여주면 된다.

[SpringIDE] 다중 컨텍스트 XML 관리시 다른 파일의 참조 문제점

 

SpringIDE를 설치한 상태에서 프로젝트를 진행 하다 보면 별 문제도 없는데 자꾸 경고가 뜨곤 한다. 그당시에는 무시를 하였지만 나의 결벽증 개발자 무의식이 나타나 이것을 잡기로 하였다.

그 경우는 바로 다음과 같은 경우이다.

datasource-context.xml

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="WEB-INF/sql-map-config.xml"/>
  <property name="dataSource" ref="dataSource"/>
</bean>

dao-context.xml

<bean id="userWidgetDao" class="com.twinkr.widget.dao.UserWidgetDataDaoImpl" >
  <property name="sqlMapClient" ref="sqlMapClient" />
</bean>

이경우 dao-context.xml의 두번째 줄에는 다음과 같은 경고가 발생한다.

“Referenced bean ‘sqlMapClient’ not found”

하지만 실행해보면 전혀 문제없음을 알 수 있다. 어차피 xml들은 모두 통합 관리되는건데 어쩌란 말인가?
SpringIDE만 꺼보면 바로 에러가 사라진다. SpringIDE가 문제라고 치부한다는것인데…

Project → Properties → Spring → Bean Support → Config Sets

에 들어가서 묶을 필요가 있는 xml파일들을 한데 묶어 Config Set으로 지정해 주자. 묶인 파일들 사이에는 어떠한 공유도 가능하다는 암묵적인 약속이 체결된다. 물론 SpringIDE맘데로; 그리고 서로 마음껏 끌어다 써도 에러는 발생하지 않는다.