Spirng MVC 와 Tiles 2 연동하기(응용)
tiles2는 Spring MVC와 연동시 그 뷰 네임을 definition 네임으로 하기 때문에 각각의 뷰마다 각각의 definition이 있어야 하므로 번거롭기 짝이없다. tiles2기반으로 프로젝트를 하는 사람들이 이를 간과할리 없다. 찾아보니 Dynamic-tiles2라는 간단한 라이브러리가 그것을 도와준다.
기본에 이어서 설명한다ViewResolver를 아래와 같이 변경한다.
[기존]
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
</bean>
[신규]
<property name="viewClass" value="org.springbyexample.web.servlet.view.tiles2.DynamicTilesView" />
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
<property name="tilesDefinitionName" value="default" />
<property name="tilesBodyAttributeName" value="body" />
<property name="tilesDefinitionDelimiter" value="." />
</bean>
tilesDefinitionName 은 기본 tiles의 Definition 이름이고, tilesBodyAttributeName 은 해당 바뀔 속성의 이름이다. tilesDefinitionDelimiter 상속시 구분자이다. 본 라이브러리를 보면 알겠지만 각각의 Spring UrlBasedViewResolver 와 TilesView를 확장하여 간단히 확장한 소스이다.(이게 spring의 장점중에 하나이다.)
어쨌든 이와 같이 ViewResolver를 설정하고 tiles2 설정을 아래와 같이 변경한다..
[기존]
<put-attribute name="title" value="Simple Tiles 2 Example" type="string" />
<put-attribute name="header" value="/WEB-INF/templates/header.jsp" />
<put-attribute name="footer" value="/WEB-INF/templates/footer.jsp" />
<put-attribute name="menu" value="/WEB-INF/templates/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/templates/blank.jsp" />
</definition>
<definition name="index" extends="default">
<put-attribute name="body" value="/WEB-INF/jsp/index.jsp" />
</definition>
<definition name="member/list" extends="default">
<put-attribute name="body" value="/WEB-INF/jsp/member/list.jsp" />
</definition>
[신규]
<put-attribute name="title" value="Simple Tiles 2 Example" type="string" />
<put-attribute name="header" value="/WEB-INF/templates/header.jsp" />
<put-attribute name="footer" value="/WEB-INF/templates/footer.jsp" />
<put-attribute name="menu" value="/WEB-INF/templates/menu.jsp" />
<put-attribute name="body" value="/WEB-INF/templates/blank.jsp" />
</definition>
IndexController는 변함이 없다.
private SampleService sampleService;
@Autowired
private TilesUrlBasedViewResolver tilesViewResolver;
/**
* Tiles를 이용한 일반적인 요청입니다.
*/
@RequestMapping("/sample/index.do")
public ModelAndView index1(HttpServletRequest request, HttpServletResponse response){
//ModelMap modelMap = new ModelMap();
//modelMap.addAttribute("documentList", sampleService.index());
//service call
sampleService.index();
request.setAttribute("name", "name");
return new ModelAndView("sample/index");
}
/**
* Tiles의 Default layout가 아닌 body layout를 요청한 예입니다.
*/
@RequestMapping("/index.do")
public void index2(){
System.out.println("/index.do");
//다른 페이지로 이동하려고 하면 이렇게 합니다.
tilesViewResolver.setTilesDefinitionName("body");
}
/**
* Tiles를 거치지 않고 redirect로 페이지를 이동합니다.
* @param request
* @param response
* @return
*/
@RequestMapping("/sample/redirect.do")
public String redirect(HttpServletRequest request, HttpServletResponse response){
tilesViewResolver.setRedirectContextRelative(true);
return "redirect:/jsp/sample/redirect.jsp";
}
/**
* Tiles를 거치지 않고 forward로 페이지를 이동합니다.
* @param request
* @param response
* @return
*/
@RequestMapping("/sample/forward.do")
public String forward(HttpServletRequest request, HttpServletResponse response){
tilesViewResolver.setRedirectContextRelative(true);
request.setAttribute("name", "name!!!");
return "sample/forward";
}
/**
* Tiles를 거치지 않고 void 처리합니다.
* @param request
* @param response
* @return
*/
@RequestMapping("/sample/voidcall.do")
public void voidcall(HttpServletRequest request, HttpServletResponse response) throws Exception{
tilesViewResolver.setRedirectContextRelative(true);
response.getWriter().print("voidcall!!!");
}
요약하면, 기존의 tiles2 설정에서 viewresolver를 Dynamic-tiles2 라이브러리 함수로 바꾸고 tiles 설정파일을 기존의 각각의 definition 네임를 제거하면 된다.
출처 : http://yunsunghan.tistory.com/259
'DEVELOPMENT > Java' 카테고리의 다른 글
Weblogic에러 - Didn't meet stated Content-Length (0) | 2010.05.28 |
---|---|
annotation for acegi (0) | 2010.05.27 |
Spirng MVC 와 Tiles 2 연동하기(기본) (0) | 2010.05.26 |
Spring MVC Annotation기반으로 사용시 URL기반 요청 문제점 해결방법 (0) | 2010.05.25 |
[ibatis] iBATIS 2.3.4.726 - PreparedStatement - ? 바인딩 로그 처리 (0) | 2010.03.05 |