Сброс базового компонента JSF (просмотр или область действия сеанса) - PullRequest
10 голосов
/ 27 февраля 2012

Я хочу сбросить компонент поддержки JSF при вызове какого-либо метода.Предположим, что есть командная кнопка, кто-то нажимает ее, и после успешной транзакции мой компонент JSF View или Session scope должен быть сброшен.Есть способ сделать это?

Спасибо

Ответы [ 5 ]

13 голосов
/ 29 февраля 2012

Я нашел решение для области видимости.

    public static void removeViewScopedBean(String beanName) 
    {
      FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(beanName);
    }
13 голосов
/ 27 февраля 2012

Bean-объект области видимости будет воссоздан, когда вы вернете не- null или не- void из метода действия, даже если он вернется к тому же представлению.Итак, просто верните String из метода действия, даже если это просто пустая строка:

public String submit() {
    // ...

    return "";
}

Чтобы завершить его, вы можете рассмотреть возможность отправки перенаправления, добавив строку запроса ?faces-redirect=true ввозвращаемый результат.

public String submit() {
    // ...

    return "viewId?faces-redirect=true";
}

Бин с областью действия - это, во-первых, неправильная область действия для всего, чего вы сейчас пытаетесь достичь.Рассматриваемый боб должен был быть областью видимости.Игнорируя это, вы можете просто воссоздать модель в методе действия или, может быть, вообще лишить законной силы сеанс (который также уничтожит все остальные bean-объекты вида и области видимости, хотя не уверен, что это то, что вам нужно).

3 голосов
/ 23 января 2015

просто очистить все просмотры:

FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();

и не забывайте о возможностях Serializable во всех представлениях

2 голосов
/ 03 января 2016

Вы также можете обновить страницу из javascript, так что компонент ViewScoped будет перезагружен, например, в простой команде commandButton:

<p:commandButton value="Button" action="#{bean.someAction()}" oncomplete="location.reload()"/>
1 голос
/ 27 сентября 2018

Я решаю проблему с кодом следующим образом:

((HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest()).getSession().removeAttribute("bean name");            

Таким образом, я вхожу в сессионный компонент и сбрасываю его без данных, которые были до

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