원본 : 데일리온
관련자료 :
스프링3.0 + tiles2.2.2
tiles2
dynamic tiles2
tiles를 사용해보면, 계속적으로 매핑을 추가해 줘야 하는 번거로움이 있다.
이를 자동적으로 동적 매핑을 해주기 래퍼클래스이다.
실제로 소스에 추가해서 커스터 마이징도 가능하다.
pom.xml dependency 추가 기본 repository가 아니라서 별도 추가가 필요하다. springbyexample.org Spring by Example http://www.springbyexample.org/maven/repo org.springbyexample dynamic-tiles2 1.1 View Resolver 추가
tilesdef.xml 설정 변경
Controller
@Autowired
private TilesUrlBasedViewResolver tilesUrlBasedViewResolver;
// bean에서 사용한 기본 설정 사용
@RequestMapping(“/tiles/default.do”)
public String index1() {
return “sample/index”;
}
// tiles .admin 사용
@RequestMapping(“/tiles/admin.do”)
public String index2() {
tilesUrlBasedViewResolver.setTilesDefinitionName(“admin”);
return “admin”;
}
@RequestMapping(“/tiles/redirect.do”)
public String redirect(HttpServletRequest request,
HttpServletResponse response) {
tilesUrlBasedViewResolver.setRedirectContextRelative(true);
return “redirect:/jsp/sample/redirect.jsp”;
}
@RequestMapping(“/tiles/forward.do”)
public String forward(HttpServletRequest request,
HttpServletResponse response) {
tilesUrlBasedViewResolver.setRedirectContextRelative(true);
return “sample/forward”;
}
@RequestMapping(“/tiles/void.do”)
public void voidcall(HttpServletRequest request,
HttpServletResponse response) throws Exception {
tilesUrlBasedViewResolver.setRedirectContextRelative(true);
response.getWriter().print(“void”);
}
!추가
forward 경우 return “forward:/WEB-INF/sample/forward.jsp”; 직접 처리 가능
문제점: 관리자 페이지의 경우에는 기본 타입과 전혀 다른 layout을 필요했기 때문에 다음과 같이
각각의 콘트롤러를 넣어 주었다.
tilesUrlBasedViewResolver.setTilesDefinitionName(“admin”);
근데 관리자 페이지가 20개정도 되었다. 만약에 100개라면 ㅋㅋ
그래서 bean 에서 View Resolver를 2개를 나누었다.
dispatcher.xml
이렇게 했을때 동일한 클래스가 2개 등록되었기 때문에 @Autowired를 사용할때 문제가 발생한다.
따라서 다음과 같이 @Qualifier가 필요하다
TilesUrlBasedViewResolver를 상속받아서 별도의 클래스로 구현하는 것도 생각해 볼 수 있다.
@Qualifier("adminTilesViewResolver")
@Autowiredprivate TilesUrlBasedViewResolver tilesUrlBasedViewResolver;
....
// tiles .admin 사용
@RequestMapping("/tiles/othercase.do")
public String index2() {
tilesUrlBasedViewResolver.setTilesDefinitionName("othercase");
return "othercase";
}
...

20 Replies to “dynamic-tiles2”