запросить JSF - PullRequest
       5

запросить JSF

0 голосов
/ 07 сентября 2011

У меня есть страница tables.jspx, которая показывает dataTable всех таблиц и имеет ссылку на createTable.jspx;когда я создаю новую таблицу, она возвращается к tables.jspx, но не показывает список с новой таблицей.(tablesBean и createTableBean являются областью запроса).Я следую учебному пособию BalusC http://balusc.blogspot.com/2006/06/using-datatables.html, лениво инициализирующему список таблиц в геттере.Насколько я теперь, если мой bean-компонент является областью действия запроса, не должен быть уничтожен после завершения запроса?Навигация осуществляется из таблиц.jspx -> createTable.jspx -> таблиц.jspx.Я хочу, чтобы после создания новой таблицы вернулся к списку таблиц, показывая свежий список с новой таблицей.Пожалуйста, помогите мне понять, что я делаю неправильно.

Вот мой код, который возвращает мой список таблиц в геттере (упрощенно):

  public List getTables(){
    if(tables==null){ //lazy initialization for a request bean as recommended by BalusC
     //Return list of tables
    }

, но если я изменю эту строкуif(tables==null) для if(tables==null ||FacesContext.getCurrentInstance().getRenderResponse())

мой список актуализируется, когда я возвращаюсь из createTable.jspx, это изменение рекомендуется, когда бин находится в области действия сеанса, но это вызывает у меня проблему с моим dataPaginator и моими функциями sortColumn(так как он возвращает свежие данные из БД, когда я сортирую список по столбцу, он возвращает неправильную строку для редактирования, потому что в каждой строке есть ссылка для редактирования и удаления)

1 Ответ

1 голос
/ 07 сентября 2011

Поскольку вы не публиковали код, я буду использовать учебник, на который вы ссылались выше, чтобы объяснить, что может происходить ...

private void loadDataList() {

        // Do your "SELECT * FROM mydata" thing.
        try {
            dataList = dataDAO.list();
        } catch (DAOException e) {
            setErrorMessage(e.getMessage() + " Cause: " + e.getCause());
            e.printStackTrace();
        }
    }

Вы правы в том, что bean-компонент с областью запроса tables будет создан и уничтожен ДВАЖДЫ, но при каждом построении он вызывает метод, перечисленный выше. Это приведет к повторной инициализации таблицы на основе текущих данных в базе данных.

Если createTable.jspx должен изменить данные в базе данных, то, возможно, эти обновления не выполняются или новые компоненты отфильтровываются вашим компонентом запроса.

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