'FrameWork'에 해당되는 글 1건

  1. [scrap] 스프링과 타일즈의 통합 2008.04.28

config file


타일즈의 TilesConfigurer를 스프링의 config 파일에 추가한다
.
더불어 SpringBeanPreparerFactory property에 추가한다.

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">

  <property name="definitions">

    <list>

      <value>/WEB-INF/spring/defs/testTemplates.xml</value>

    </list>

  </property>

  <property name="preparerFactoryClass" value="org.springframework.web.servlet.view.                                                 tiles2.SpringBeanPreparerFactory"/>

</bean>


두번째로 할 일은 viewResolver를 설정해서 타일즈의 definition 을 이용할 수 있게끔한다.


<bean id="viewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">

  <property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView"/>

  <property name="cache" value="true" />

</bean>

이렇게 해주면 컨트롤러에서 tiles definition ModelAndView의 첫번째 인자에 넣어주면 알아서 처리해준다.

  public ModelAndView test(HttpServletRequest request, HttpServletResponse response)
        throws Exception {

    request.setAttribute("test", "test111");

    return new ModelAndView("myapp.default");

  }


jsp
만 이용할때는 tiles의 레이아웃을 선택하는 페이지가 하나씩 있거나 동적으로 값을 받아서 처리해 줘야 했는데
이런 처리를 위의 설정으로 모두 해결이 되었다.

설정 끝~~~ 이제 이용하면 된다.

간단한 예제

먼전 xml에 테스트 레이아웃을 하나만든다.
/WEB-INF/spring/defs/testTemplates.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE tiles-definitions PUBLIC

       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"

       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

 <definition name="myapp.default" template="/WEB-INF/layout/default.jsp">

  <put-attribute name="title" value="welcome to tiles world~~~" />

  <put-attribute name="header" value="/WEB-INF/layout/header.jsp" />

  <put-attribute name="menu" value="/WEB-INF/layout/menu.jsp" />

  <put-attribute name="body" value="/WEB-INF/jsp/test/test1.jsp" />

  <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />

 </definition>

</tiles-definitions>


spring
test controller 추가

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

 <!-- MultiActionContoller-->

 <bean id="testUseController" class="test.TestUseController">

  <property name="methodNameResolver">

   <ref local="testUseMethodNameResolver" />

  </property>

 </bean>

 <bean id="testUseMethodNameResolver"  class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">

  <property name="mappings">

   <props>

    <prop key="/test/test.gs">test</prop>

   </props>

  </property>

 </bean>

 <bean id="testUseUrlMapping"

  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

  <property name="mappings">

   <props>

    <prop key="/test/test.gs">testUseController</prop>

   </props>

  </property>

 </bean>

</beans>


test Controller

package test;

 

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

 

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

 

public class TestUseController extends MultiActionController {

 public ModelAndView test(HttpServletRequest request, HttpServletResponse response) throws Exception {

  request.setAttribute("test", "test111");

  return new ModelAndView("myapp.default");

 }

}

* jsp 레이아웃 관련 페이지는 이전 타일즈에 사용하던 소스와 동일

ViewPreparer 추가하기

/WEB-INF/spring/defs/testTemplates.xml

<?xml version="1.0" encoding="ISO-8859-1" ?>

<!DOCTYPE tiles-definitions PUBLIC

       "-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"

       "http://tiles.apache.org/dtds/tiles-config_2_0.dtd">

<tiles-definitions>

  <definition name=".header" template="/WEB-INF/layout/header.jsp" preparer="headerTilesPreparer"/>

  <definition name="myapp.default" template="/WEB-INF/layout/default.jsp">

    <put-attribute name="title" value="welcome to tiles world~~~" />

    <put-attribute name="header" value=".header" />

    <put-attribute name="menu" value="/WEB-INF/layout/menu.jsp" />

    <put-attribute name="body" value="/WEB-INF/jsp/test/test1.jsp" />

    <put-attribute name="footer" value="/WEB-INF/layout/footer.jsp" />

  </definition>

</tiles-definitions>


서비스 추가
HeadService .java


package test;

 

public interface HeadService {

  public String getHelloWorld()  throws Exception;

}

HeadServiceImpl.java

 

package test;

 

public class HeadServiceImpl implements HeadService{

  public String getHelloWorld(){

    return "HellowWorld";

  }

}

 

스프링에 서비스 추가


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

  <!-- Service -->

  <bean id="headService" parent="baseTransactionProxy">

    <property name="target">

      <bean class="test.HeadServiceImpl"/>

    </property>

  </bean>

  <bean id="headerTilesPreparer" class="test.HeaderTilesPreParer" autowire="byName"/>

</beans>


HeaderTilesPreParer.java


package test;

 

import org.apache.tiles.Attribute;

import org.apache.tiles.AttributeContext;

import org.apache.tiles.context.TilesRequestContext;

import org.apache.tiles.preparer.PreparerException;

import org.apache.tiles.preparer.ViewPreparerSupport;

 

public class HeaderTilesPreParer extends ViewPreparerSupport {

 

  private HeadService headService;

 

  public HeadService getHeadService() {

    return headService;

  }

 

  public void setHeadService(HeadService headService) {

    this.headService = headService;

  }

 

  public void execute(TilesRequestContext tilesContext,

      AttributeContext attributeContext) throws PreparerException {

    try {

      attributeContext.putAttribute("head", new Attribute(headService.getHelloWorld()));

    } catch (Exception e) {

      e.printStackTrace();

    }

  }

}

 

header.jsp


<%@ page contentType="text/html; charset=EUC-KR" %>

<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>

<tiles:importAttribute/>

<div id="header">

  Welcome to Tiles header : ${head}

</div>


PreParer
에서 넘긴 값은 <tiles:importAttribute/> 또는 <tiles:importAttribute name="head"/> 이런 방식으로 값을 받고
el
로 처리하면 된다.

 

,