JSF: показать историю навигации с помощью кнопок «назад» и «вперед».

Я хотел бы знать, как показать моему пользователю вверху страницы историю его навигации. Как это:

home > register > product

И как реализовать кнопку «назад» и «вперед» в JSF. Я прочитал некоторые темы, но ни одна из них не объясняет, как реализовать эти функции. Я не хочу использовать для этого какой-то фреймворк, я думаю, что это простая вещь, которая не нужна для использования фреймворка.

Я думаю, что не стоит делать что-то целиком с <h:link />, я приведу вам пример:

Вход пользователя в систему:

home > register

пользователь регистрируется сам

home > login > register (есть ссылка, по которой он/она может зарегистрировать другого пользователя)

правильная история будет:

home > login > register

И нет

home > register

person Valter Silva    schedule 28.11.2012    source источник
comment
<h:link> предназначен для использования в цикле по всем страницам, посещенным до сих пор, например. <ui:repeat><h:link>, как намекнул Луиджи.   -  person BalusC    schedule 29.11.2012


Ответы (2)


Какую часть второго ответа в вашей ссылке вы не поняли? Используя LinkedList (сработает Stack, реализованный LinkedList, или Deque, реализованный ArrayDeque), и самостоятельное управление операциями push и pop не должно быть сложным, также создайте раздел на своей странице, чтобы иметь эти ссылки, т.е. реализованные <ui:repeat>.

В любом случае, PrimeFaces решила часть этой задачи с помощью компонента breadcumb, даже если вы не хотите использовать стороннюю библиотеку для этой работы, вы можете взглянуть на sources и посмотрите, как ребята из PrimeFaces справились с этой работой.

person Luiggi Mendoza    schedule 28.11.2012
comment
Второй пример. Я понимаю, что вы сказали, но как я могу передать текущую страницу классу, чтобы он мог вставляться в этот связанный список? - person Valter Silva; 29.11.2012
comment
Он доступен #{view.viewId} в EL или UIViewRoot#getViewId() в Java. - person BalusC; 29.11.2012

Если у вас есть каждая страница как отдельная страница .xhtml, вы можете просто жестко закодировать хлебные крошки. Если вы хотите, чтобы кнопка «Назад» работала хорошо, то во всех ваших ссылках/кнопках вам нужно добавить ?faces-redirect=true к вашим ссылкам.

Пример

<h:commandLink value="Test" action="blah.xhtml?faces-redirect=true" />
person Catfish    schedule 28.11.2012
comment
Ну, он мог использовать любую ссылку. Я просто показывал, как сделать редирект. - person Catfish; 28.11.2012
comment
Ваш код выполняет post-redirect-get, в то время как в данном конкретном случае было достаточно только get. См. также stackoverflow.com/questions/4317684/ - person BalusC; 28.11.2012
comment
@BalusC, было бы лучше, если бы у меня была эта кнопка «назад» и «вперед» без хардкора, потому что я не знаю поведения пользователя, поэтому это должно быть что-то более гибкое. - person Valter Silva; 29.11.2012