블로그 이미지
Max.

calendar

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

Notice

2011.06.05 09:27 개발관련
DWR처럼 Sitemesh도 너무 오랫동안 처다보지 못해서, 설정방법이 오래되어 있었는데, 3.0에서는 설정방법이 다양해질듯 하다. 아직 알파버전이라 적용하긴 힘들겠지만, 조만간 버전업되면, 바꿔야 할것이다. 

주요내용은 이 사이트를 참조 하자. 

http://www.sitemesh.org/new-in-sitemesh3.html

 
저작자 표시
신고
posted by Max.
TAG Sitemesh
2007.08.28 08:43 이전글(~2009)
삽질의 추억

보통 Spring MVC에서 요청 URL을 interceptor할때 HandlerInterceptorAdapter 를 구현 확장하게 된다.인터셉터하는 목적에 따라 다르겠지만, 어떤 인증값을 확인할때는 인증값이 없으면 Exception을 던지는 경우와 특정 페이지로 redirect하는 경우가 있다.
그러나 특별한 경우에 예상치 못한 오류를 발생했다.

그 경우는 이렇다. ( SiteMesh + DWR + SpringMVC + HandlerInterceptorAdapter  )
[action-xxx.xml]
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
           <property name="interceptors">
          <list>
              <ref bean="frontSecurityInterceptor" />
            ....
          </list>
        </property>   
        <property name="mappings">
            <props>
                <prop key="/**/**/**/post_list.do">postController</prop>
                <prop key="/**/**/**/post_view.do">postController</prop>
                  .....
            </props>
        </property>
    </bean>
[DWR]
    <bean id="frontFacade" class="xxx.facade.FrontFacadeImpl">
    <property name="postService" ref="postService"></property>
        ........   
        <dwr:remote javascript="AjaxFrontFacade">   
        <dwr:include method="getFronts" />     
        ........
        </dwr:remote>  
    </bean>
[interceptor]
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object controller) throws Exception {
        .......
        if(result == false) response.sendRedirect("XXXX");
       or
        if(result == false) throw new IdCheckedException(errorMessage);
       ......
    }


SiteMesh 사용시 Exception 발생시 각 Exception 마다 따로 처리해야 한다. 좀더 정교하게 Exception처리를 할수 있겠으나 실상은 귀찮이즘이 발동한다. 그보다 더 유혹적인것은 redirect 이다. 특정 페이지로 무조건 돌려버리니까 편하다. SiteMesh 적용하기도 좀더 편하다. SiteMesh 는  url 베이스이기에 특정 오류페이지를 보이기가 여간 까다롭지 않다.

예를 들면 /board/list.do 를 요청했을대 오류페이지를 SiteMesh 에서 특정 layout으로 보일려면? 설정이 복잡해 진다. 그러나 어떤 오류가 나왔을때 특정 페이지리 rediect 하면 일정한 포멧의  layout 을 보여주는것은 어렵지 않다.(그것이 SiteMesh 의 장점이니까)
따라서 SiteMesh 로 Layout 을 쓴다면 Exception처리보다는 redirect 가 더 매력적으로 보인다.

그런데 그 Layout에 DWR를 이용한 Ajax를 구현하고, 해당 url를 Interceptor 한다면 문제가 발생한다. Interceptor 에서 rediect를 사용해버렸으므로 더이상 SiteMesh 에서 request,response 를 사용할수없는 모양이다.(Sitemesh 는  filter이므로 내부적으로 request,response를 사용할것이다.)

결국 다시 Exception으로 돌아가야 했고, 각 Exception마다 다른 페이지와 매핑해야만 했다. 좀더 편해지고자 꼼수를 쓸려다 삽질만한 결과를 낳았다.

신고
posted by Max.
2007.07.10 07:06 이전글(~2009)

LocaleResolver와 함께 사용자에게 UI의 멋진 기능을 제공하는 기능중에 하나인데,
실무에 사용하면 좋을것 같지만,
실제로는 UI 디자인 컨셉은 디자인팀과 기획팀에서 결정하여,
퍼블리셔(코더)팀에서 만들어 넘기게 된다.
그때 대부분 어떤 layout으로 만들어져서 스킨기능을 고려한 개발을 하기 힘들다.
좀더 편리하게 개발자가 스킨기능을 개발할수 있는 방법이 없을까?

Spring MVC ThemeResolver + Sitemesh 로 좀더 편리하게 스킨기능을 만들수 있을것 같다.

신고
posted by Max.
prev 1 next