2013-03-08 2 views
1


필터 사용에 대한 제안이 필요합니다. 단지 내가 생각하고있는 것을 알고 싶었다. 은 좋은 방법이다.
그래서 JSP, 스프링 MVC 2.5, 자바 스크립트 등을 사용하여 5-6 화면을 개발해야합니다.
모두 이러한 화면은 드롭 다운 목록 등의 공통 데이터 요소를 많이 공유합니다. 필터 구현 중 필터의 URL 패턴 아래에있는 모든 화면이이 데이터를 가져 오도록 필터 ModelMap 의 바로 아래에이 드롭 다운 값을 채 웁니다.
올바른 방법입니까?스프링 MVC 필터 솔루션

+1

필터? 절대적으로하지. 봄 요격기, 아마도,하지만 개인적으로 코드 재사용에 대한 지나치게 미세한 접근 방식을 추구 할 때 가장 놀랄만하지 않은 원칙을 너무 크게 위반하는 것을 개인적으로는 싫어할 것입니다. 코드를 유틸리티 클래스에 넣고 각 컨트롤러의 @ModelAttribute 메서드에서 호출합니다. – Affe

+0

@Affe이 접근법을 성공적으로 구현 한 요격기 접근 방식에 동의합니다. –

+0

감사 주셔서 감사합니다. 마이크로 코드 재사용 접근 방식이 내 목표 였어 :) – Tiles787

답변

2

필자는 필터가 트릭을 수행 할 것으로 생각하지만,이 접근 방식을 벗어날 것입니다. 또한 Spring의 인터셉터를 사용하여 동일한 작업을 수행하고 종속성 주입, 트랜잭션 관리 및 Spring 데이터 패키지와 같은 Spring의 기능을 여전히 사용할 수 있습니다.

Dispatcher 설정을위한 구성에서 인터셉터를 설정하십시오.

<mvc:interceptors> 
    <mvc:interceptor> 
     <mvc:mapping path="/**"/> 
     <bean class="org.my.domain.interceptors.LookupHandlerInterceptor" /> 
    </mvc:interceptor> 
</mvc:interceptors> 

는 그런 다음 인터셉터 클래스를 정의 :

public class LookupHandlerInterceptor extends HandlerInterceptorAdapter { 

     @Autowired 
     LookupLoaderApplicationListener loader; 

     @Override 
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) 
     throws Exception { 
      request.setAttribute("lookupList", loader.getCategories()); 
      return super.preHandle(request, response, handler); 
     } 
    } 

이 방법 당신은 당신이 설정을 가질 수있는 지속성 당신이 당신의 응용 프로그램 내에서 사용할 수있는 다른 봄 기능을 활용할 수있다. 그런 다음 데이터베이스에서이 목록을 관리 할 수 ​​있습니다.

+0

감사합니다 케빈. 나는 모델 속성에 데이터를 유지한다고 생각합니다. @SessionAttributes와 함께 modelMap을 사용하여 여러 요청간에이를 유지해야합니다. – Tiles787

1

나는 응용 프로그램의 별도 부분에서 컨트롤러의 올바른 기능에 중요한 최소한의 놀라움과 숨어있는 코드의 원칙을 위반하는 것이 "마법"의 어떤 비트/영리함이이 작업에서 짜내 어 졌는지 가치가 없다고 생각합니다.

향후 개발자가 화면을 설정하는 코드를 숨기는 이유는 무엇입니까?

그들은 모두 공통된 참조 데이터를 공유하기 때문에 모든 시간 동안 영원히 유지 될 것입니까? 서로 다른 화면에 대한 요구 사항이 서로 다르기 시작하면 빨리 추락합니다.

기본적으로 컨트롤러를 만들기 위해 구성 대신 상속을 사용하는 것과 컨트롤러의 코드를 볼 수없는 것 외에 모든 단점이 있습니다. 간단하게 공통 작업을 수행하는 유틸리티 빈을 만들어 컨트롤러에 삽입하고 한 줄의 @ModelAttribute 메서드를 호출하여 호출하면됩니다. 앞으로 개별 요구 사항이 바뀔 때 혼란이 줄어들 것입니다.