Лучшие практики для ссылок "Назад" в 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}" />
Другие вопросы по тегам