Обновить управляемый сессионный компонент в JSF 2.0 - PullRequest
2 голосов
/ 12 октября 2011

После того, как я зафиксирую некоторые данные в базе данных, я хочу, чтобы сессионные компоненты автоматически обновлялись, чтобы отразить недавно зафиксированные данные.Как этого добиться при использовании управляемых сессионных компонентов в JSF 2.0?

В настоящее время мне нужно перезапустить веб-сервер, чтобы сеансы очистились и снова загрузились.

1 Ответ

6 голосов
/ 12 октября 2011

2 способа:

  1. Вместо этого поместите их в область просмотра.Хранение специфичных для представления данных в течение всей сессии - пустая трата времени.Если у вас есть проблемы с производительностью, вам следует сконцентрироваться на реализации пулов соединений, разбивки на уровни DB и / или кэширования на уровне постоянства (например, JPA2 поддерживает кэширование второго уровня).

    @ManagedBean
    @ViewScoped
    public class FooBean {
        // ...
    }
    

  2. Добавьте общедоступный метод load(), чтобы его можно было вызывать из метода действия (при необходимости, из другого компонента).

    @ManagedBean
    @SessionScoped
    public class FooBean {
    
        private List<Foo> foos;
    
        @EJB
        private FooService fooService;
    
        @PostConstruct
        public void load() {
            foos = fooService.list();
        }
    
        // ...
    }
    

    , который можно вызывать в методе действия внутри того же самогоbean-компонент (если вы, конечно, отправляете форму тому же управляемому bean-компоненту):

        public void submit() {
            fooService.save(foos);
            load();
        }
    

    или из метода действия в другом bean-компоненте (для случая, когда дизайн вашего управляемого bean-компонента немного отличается от обычного):

        @ManagedProperty("#{fooBean}")
        private FooBean fooBean;
    
        public void submit() {
            fooService.save(foos);
            fooBean.load();
        }
    

    Это, конечно, влияет только на текущий сеанс.Если вы хотите повлиять и на другие сеансы, вам действительно следует рассмотреть возможность помещения их в область просмотра вместо этого, как предлагается в первом способе.

См. Также:

...