Ответ 1
Я нашел решение для области просмотра.
public static void removeViewScopedBean(String beanName)
{
FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(beanName);
}
Я хочу reset с помощью поддержки JSF bean при вызове какого-либо метода. Предположим, что есть командная кнопка, кто-то ее нажимает и после успешной транзакции мой объект обзора или сеанс JSF bean должен быть сброшен. Есть ли способ сделать это?
Спасибо
Я нашел решение для области просмотра.
public static void removeViewScopedBean(String beanName)
{
FacesContext.getCurrentInstance().getViewRoot().getViewMap().remove(beanName);
}
Вид, охваченный bean, будет воссоздан, когда вы возвращаете не null
или не void
из метода действия, даже если он вернется к тому же представлению. Итак, просто верните String
из метода действия, даже если это просто пустая строка:
public String submit() {
// ...
return "";
}
Чтобы сделать это, вы можете рассмотреть отправку перенаправления, добавив строку запроса ?faces-redirect=true
к возвращенному результату.
public String submit() {
// ...
return "viewId?faces-redirect=true";
}
Сессионная область bean на первом месте является неправильной областью для того, что вы в настоящее время пытаетесь достичь. Рассматриваемый bean должен был быть просмотренным. Игнорируя это, вы можете просто воссоздать модель в методе действий или, может быть, полностью аннулировать сеанс (что также приведет к уничтожению всего остального вида и области сеанса beans, не уверен, что это то, что вам нужно).
просто очистить все виды:
FacesContext.getCurrentInstance().getViewRoot().getViewMap().clear();
и не забудьте реализовать Serializable во всех представлениях
Вы также можете обновить страницу из javascript, так что ViewScoped Bean будет сброшен, например, в файле primfaces:
<p:commandButton value="Button" action="#{bean.someAction()}" oncomplete="location.reload()"/>