2009-05-11 9 views
3

ich eine Ansichtsklasse, die AbstractExcelView erstrecktWie Message auf einen Blick injizieren erstreckt Abstract

public class ExportExcelParticipantsView extends AbstractExcelView { 
... 
} 

Ich mag würde eine Message auf diese Bohne injizieren. Ist das möglich?

verwende ich ein ResourceBundleViewResolver Ansichten zu lösen (in diesem Fall)

<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> 

Ist es so, dass diese Ansicht Klasse jedes Mal, wenn die Ansicht instanziiert wird angefordert wird und somit eine Nachrichtenquelle Injektion zu dieser Klasse härter ist als gewöhnlich? Ist es überhaupt möglich?

Im Moment übergebe ich die MessageSource als Modellattribut vom Controller an die Ansicht. Ist es möglich, dies zu vermeiden?

Antwort

1

Ich schlage vor, eine einfache Unterklasse von ResourceBundleViewResolver zu erstellen. Diese Unterklasse würde die Loadview() -Methode außer Kraft setzen und die Message in das View-Objekt injizieren:

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; 
    } 
} 

Die Message, die hier eingespritzt wird, ist der eigene Nachrichtenquelle des appcontext, aber man konnte eine beliebig Sie brauchen, um hier zu injizieren. Außerdem müsste Ihre View-Klasse MessageSourceAware implementieren.