Использование полиморфизма при создании веб-страниц? - PullRequest
1 голос
/ 22 сентября 2010

Это пример проблемы, с которой я столкнулся.

Когда пользователь заходит на домашнюю страницу моего приложения, у него есть две возможности:

  1. вошел в систему
  2. не вошел в систему

Если пользователь вошел в систему, я хочу отобразить имя пользователя в верхнем правом углу и ссылку с надписью «Выйти».Если пользователь не вошел в систему, я хочу отобразить ссылку с надписью «вход в систему или регистрация».

Ранее я бы вызвал некоторый код из JSP, который вернул бы соответствующий фрагмент HTML, в который я вставил бымоя страница.Но это, вероятно, не лучшая вещь, хотя это просто.

Теперь я считаю, что я должен отправить начальный запрос домашней страницы сервлету (вместо jsp), который будет создавать экземпляр какого-либо объекта типа«HomePage», который имеет подклассы «LoggedInHomePage» и «NotLoggedInHomePage» в зависимости от того, доступен ли идентификатор пользователя в переменной сеанса.Мне нужно будет определить правильный конструктор с помощью оператора if или case.

Пока что это выглядит аккуратнее.Но в этот момент все становится снова грязно, потому что теперь мне нужно знать, есть ли у меня userId, предоставленный в моем «объекте запроса», для которого мне нужно использовать некоторые операторы if, или я использую другой шаблон jsp, который подразумевает наличие двухпочти идентичные jsps, сидящие на сервере для каждой страницы.

Ни одна из них не выглядит элегантной.Помощь наиболее ценится.Если у вас есть четкое решение этой проблемы, пожалуйста, просто проигнорируйте мое описание и выложите его, я не против выбросить любые идеи, которые я представил здесь.

Ответы [ 2 ]

3 голосов
/ 22 сентября 2010

Я бы просто создал одну домашнюю страницу с компонентом входа в систему, в обязанности которого входит отображение текущего статуса и выполнение необходимой аутентификации при входе в систему.

Это отношение «имеет», а не «есть»

1 голос
/ 22 сентября 2010

Одно из возможных решений:

Добавить прототип метода к HomePage.Назовите это getNavigationArea() или getNavigationLinks() (скажем).Этот метод вернет, скажем, набор Link объектов, которые могут быть отрисованы с использованием подходящего HTML.

Оба LoggedInHomePage и NotLoggedInHomePage переопределят этот метод.Реализация первого предоставит экземпляр Link с надписью «logout», в то время как последний предоставит экземпляр с надписью «зарегистрироваться / зарегистрироваться».

JSP отобразит область навигации, не зная, каково ее содержимое.Таким образом, у вас будет только одна страница JSP, независимо от статуса пользователя.Также вы можете добавлять пользователей другого типа, например, RegularUser, AdminUser и т. Д. С различными вариантами навигации, не добавляя новые страницы JSP.

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