Reset Поддержка JSF Bean (просмотр или сеанс)

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

Спасибо

Ответы

Ответ 1

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

    public static void removeViewScopedBean(String beanName) 
    {
      FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(beanName);
    }

Ответ 2

Вид, охваченный bean, будет воссоздан, когда вы возвращаете не null или не void из метода действия, даже если он вернется к тому же представлению. Итак, просто верните String из метода действия, даже если это просто пустая строка:

public String submit() {
    // ...

    return "";
}

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

public String submit() {
    // ...

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

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

Ответ 3

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

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

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

Ответ 4

Вы также можете обновить страницу из javascript, так что ViewScoped Bean будет сброшен, например, в файле primfaces:

<p:commandButton value="Button" action="#{bean.someAction()}" oncomplete="location.reload()"/>