2009-05-11 4 views
3

AbstractExcelView를 확장 한 뷰 클래스가 있습니다.AbstractView를 확장 한 뷰에 MessageSource를 삽입하는 방법

public class ExportExcelParticipantsView extends AbstractExcelView { 
... 
} 

이 빈에 MessageSource를 주입하고 싶습니다. 이것이 가능한가?

ResourceBundleViewResolver를 사용하여보기 (이 경우)를 해결합니다.

<bean id="resourceBundleViewResolver" 
    class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> 
    <!-- Classpath needs to have views.properties --> 
    <property name="basename" value="views" /> 
    <!-- This view resolver is the first one used --> 
    <property name="order" value="0"/> 
    <property name="defaultParentView" value="parent-view"/> 
</bean> 

뷰가 요청 될 때마다이 뷰 클래스를 인스턴스화하여이 클래스에 메시지 소스를 주입하는 것이 더 어렵습니다. 보통의? 심지어 가능할까요?

현재 모델에서 MessageSource를 컨트롤러의보기로 전달합니다. 이것을 피할 수 있습니까?

답변

1

ResourceBundleViewResolver의 간단한 하위 클래스를 만드는 것이 좋습니다. 이 서브 클래스에는 loadView() 메소드를 오버라이드 (override)보기 객체로 된 MessageSource를 주입 것 :

public class MyViewResolver extends ResourceBundleViewResolver { 

    @Override 
    protected View loadView(String viewName, Locale locale) throws Exception { 
     View view = super.loadView(viewName, locale); 
     if (view instanceof MessageSourceAware) { 
      ((MessageSourceAware)view).setMessageSource(getApplicationContext()); 
     } 
     return view; 
    } 
} 

여기 주입 된 appcontext의 자신의 메시지 소스 된 MessageSource를, 그러나 당신은 당신이 여기에 필요 하나를 주입 할 수있다. 또한 View 클래스는 MessageSourceAware를 구현해야한다.

관련 문제