Лучшие практики для ссылок "Назад" в JSF
Каков наилучший способ сделать ссылки "Назад", чтобы приложение оставалось согласованным после навигации.
onclick="history.go(-1)"
, Это очень вредно?- Использование стека в компоненте поддержки, который выдает вам навигационный регистр последнего представления. Вы можете сделать это, установив случай навигации с помощью
<f:setPropertyActionListener>
, - Ни одно из этих... других решений.
Любая помощь будет оценена! Поделитесь своими мыслями! Даниил
2 ответа
Решение
Я использую:
- Оркестр MyFaces для обеспечения объема разговора
<redirect />
для каждого правила навигации
Это гарантирует, что при нажатии кнопки "назад" или history.go(-1)
:
- данные, которые были доступны на предыдущем экране, будут все еще там (потому что разговор все еще активен)
- "Повторно" диалоговое окно браузера не открывается.
PS "обратная ссылка" имеет другое значение
Если вы хотите решить эту проблему с помощью запрограммированных навигационных ссылок, вы можете использовать LinkedList
как стек Таким образом, вы можете установить границы для количества сохраненных вариантов навигации.
Пример:
public class BackNavigationBean {
public BackNavigationBean() {
history = new LinkedList<String>();
}
private LinkedList<String> history;
public LinkedList getHistory() {
return history;
}
public void setLastPage(String navigationCase) {
history.push(navigationCase);
if (history.size() > 10) {
history.pollLast();
}
}
public String getLastPage() {
return history.pop();
}
}
Итак, в "прямых" ссылках:
<h:commandLink value="Forward" action="#{myBean.someMethod}">
<f:setPropertyActionListener target="#{backNavigationBean.lastPage}"
value="back_to_index" />
</h:commandLink>
И обратная ссылка будет:
<h:commandLink value="Back"
action="#{backNavigationBean.getLastPage}" />