Spring-Mobile предпочтение сайта в viewresolver не на каждом контроллере
Весенняя мобильная документация показывает, как реализовать отдельный слой мобильного представления, как показано ниже:
@Controller
public class HomeController {
@RequestMapping("/")
public String home(SitePreference sitePreference, Model model) {
if (sitePreference == SitePreference.MOBILE) {
// prepare mobile view for rendering
return "home-mobile";
} else {
// prepare normal view for rendering
return "home";
}
}
}
Однако я бы предпочел применить другое имя представления (с префиксом к папке) в решателе представлений. Как бы я это сделал?
(редактировать: ответов нет, обычно у весенних проблем с конфигурацией есть несколько ответов... я задавал особо глупый вопрос?)
1 ответ
Ваш вопрос мне кажется действительным. Самый простой ответ, который я могу придумать, - это разделить представления и использовать значение предпочтения сайта в имени папки:
/views/normal/home.jsp
/views/mobile/home.jsp
(Конечно, префикс решателя представления должен быть "/views/").
Теперь в контроллере вы можете иметь:
return sitePreference.name().toLowerCase() + "/home";
Вы не можете использовать два отдельных распознавателя, так как контроллер не может решить, какой просмотрщик использовать, а только какой.
Что касается выбора распознавателя, этим можно управлять только через свойство order, которое полностью выходит за рамки этого варианта использования.
Изменить: я почувствовал запах кода в том, что одинаковая логика дублируется во всех методах контроллера.
Итак, чтобы сохранить эту логику в одном месте, попробуйте использовать HandlerInterceptor
который добавил бы префикс к имени представления в postHandle
метод. Вам нужно только получить текущий экземпляр SitePreference самостоятельно, основываясь на запросе, что должно быть вполне возможно.