Как внедрить MessageSource в представление, расширяющее AbstractView - PullRequest
3 голосов
/ 11 мая 2009

У меня есть класс представления, который расширяет AbstractExcelView

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 Ответ

1 голос
/ 14 мая 2009

Я предлагаю создать простой подкласс ResourceBundleViewResolver. Этот подкласс переопределяет метод loadView () и внедряет MessageSource в объект View:

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, но вы можете ввести любой, который вам нужен, здесь. Кроме того, ваш класс View должен был бы реализовать MessageSourceAware.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...