Spring-Mobile предпочтение сайта в viewresolver не на каждом контроллере - PullRequest
2 голосов
/ 08 декабря 2011

В мобильной документации spring показано, как реализовать отдельный слой мобильного представления, как показано ниже:

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

1 голос
/ 09 декабря 2011

Ваш вопрос мне кажется действительным.Самый простой ответ, который я могу придумать, состоит в том, чтобы разделить представления и использовать значение предпочтения сайта в имени папки:

/views/normal/home.jsp
/views/mobile/home.jsp

(Префикс решателя представления должен быть "/ views /", конечно).

Теперь в контроллере вы можете иметь:

return sitePreference.name().toLowerCase() + "/home";

Вы не можете использовать два отдельных распознавателя, так как контроллер не может решить, какой просмотрщик использовать, а только какой просмотр.

Что касается выбора резольвера, которым можно управлять только через свойство order, которое полностью выходит за рамки этого варианта использования.


Редактировать: я почувствовал запах кодаимея одинаковую логику, дублированную во всех методах контроллера.

Итак, чтобы сохранить эту логику в одном месте, попытайтесь использовать пользовательский HandlerInterceptor, который добавит префикс к имени представления вpostHandle метод.Вам нужно только получить текущий экземпляр SitePreference самостоятельно, основываясь на запросе, что должно быть совершенно возможно.

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