Я играю с проектом GWT/GAE, который будет иметь три разные «страницы», хотя на самом деле это не страницы в смысле GWT. Верхние представления (по одному для каждой страницы) будут иметь совершенно разные макеты, но некоторые из виджетов будут совместно использоваться.Несколько «страниц» в GWT с дружественными для человека URL-адресами
Одна из страниц - это основная страница, загружаемая URL-адресом по умолчанию (http://www.site.com), но другим двум требуется дополнительная информация о URL-адресе, чтобы различать тип страницы. Они также нуждаются в параметре имя, (как http://www.site.com/project/project-name. Есть по крайней мере два решения этого, что я в курсе.
-
история
- Использование GWT механизм и пусть тип страницы и параметры (например, название проекта) быть частью лексемы истории.
- использовать сервлеты с рисунком URL-картографирования (как/проект/*)
Первый выбор может показаться очевидным на первый, но он имеет ряд недостатков. Во-первых, пользователь должен иметь возможность легко запоминать и вводить URL-адрес непосредственно в проект. Трудно создать дружественный человеческий URL-адрес с историческими жетонами. Во-вторых, я использую gwt-present и этот подход означал бы, что нам нужно поддерживать подзаголовки в одном токене, чего я бы предпочел избежать. В-третьих, пользователь обычно останется на одной странице, поэтому имеет смысл, что информация о странице является частью «статического» URL-адреса.
Использование сервлетов решает все эти проблемы, но также создает другие.
Итак, мои первые вопросы: какое лучшее решение здесь?
Если бы я пошел на решение сервлета, появятся новые вопросы.
- Возможно, имеет смысл разделить приложение GWT на три отдельных модуля, каждый с точкой входа. Каждый сервлет, который отображается на определенную страницу, затем просто перенаправляет запрос в модуль GWT, который обрабатывает эту страницу. Так как пользователь обычно остается на одной странице, браузеру нужно только загрузить js для этой страницы. Исходя из того, что я прочитал, это решение не рекомендуется.
Я мог бы также придерживаться одного модуля, но затем GWT нужно выяснить, какую страницу он должен отображать. Он может либо запрашивать сервер, либо анализировать сам URL.
- Если я придерживаюсь одного модуля GWT, мне нужно сохранить информацию о странице, хранящуюся на стороне сервера. Естественно, я думал о сеансах, но я не уверен, что это хорошая идея для смешивания информации о странице с пользовательскими данными. Обычно сеанс работает между логином пользователя и выходом из системы, но в этом случае ему потребуется другое поведение. Будет ли плохой практикой заниматься этим через сеансы?
Один модуль GWT + сервлет также приводит к другой проблеме. Если пользователь перейдет с страницы проекта на главную страницу, как GWT узнает, что это произошло? Приложение не будет перезагружено, поэтому оно будет рассматриваться как простое изменение состояния. Кажется довольно неэффективным, чтобы проверять информацию о странице для каждого изменения состояния.
Кто-нибудь заботится о том, чтобы вывести меня из туманной тьмы, которая окружает меня? :-)
Я согласен, что токены истории кажутся интуитивным выбором, но я все еще не уверен, что он оптимален :-). То, что я имею в виду с дружественными дружественными URL-адресами, - это то, что история GWT префиксает токен с # (который большинство пользователей не запомнит). Кроме того, поскольку пользователи обычно ожидают, что url будет состоять из/только, мне нужно будет использовать/как место, так и разделитель параметров, который трудно поддерживать. Или мне не хватает чего-то, связанного с обработкой истории здесь? Я согласен с тем, что разделение кода имеет смысл с этим решением. – Andreas
Весь смысл пользователям «запоминать» URL не совсем подходит ко мне (но опять же, я не знаю, на какой странице вы работаете и кем могут быть пользователи) - я не думаю, что кто-то пытается вспомнить URL-адреса в настоящее время, а не когда есть такие сайты, как del.icio.us, люди закладывают сайты, которые часто посещают. Кроме того, адрес hash/# не является тем, что Google придумал, это стандартный способ использования и поддержки всех браузеров, обычно ссылающийся на «id» элемента DOM, но в случае веб-приложения - на его состояние. Gmail использует его, равно как и все большее число веб-сайтов. –
Возможно, вы правы. Возможно, я прилагаю слишком много усилий для всего «дружественного» URL-адреса. Для Gmail это не имеет никакого значения, поскольку вы всегда получаете доступ к основному сайту.В моем случае пользователи будут в 90% случаев переходить непосредственно на страницу проекта, поэтому я считаю, что было бы неплохо, если бы это был естественный URL-адрес, например, http://www.site.com/project/theproject, а не что-то вроде http://www.site.com/#page=project&name=theproject. Я немного передумаю этот подход :-). Спасибо за ваш вклад. – Andreas